forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Вопросы от новичка (http://forum.boolean.name/showthread.php?t=15809)

WISHMASTER35 06.02.2013 01:31

Ответ: Вопросы от новичка
 
Где можно глянуть список всех функций для CG(шейдера)?
Что-то не вспомню как остаток от деления вычислить.

pax 06.02.2013 07:20

Ответ: Вопросы от новичка
 
Тут например
http://http.developer.nvidia.com/Cg/Cg_language.html
http://http.developer.nvidia.com/Cg/index_stdlib.html

Amatsu 06.02.2013 17:49

Ответ: Вопросы от новичка
 
Кто-нибудь пробовал выводить rendertexture на экран через GUI.DrawTexture? Дело в том, что мне надо отрендерить за пределами сцены модель, а потом полученную текстуру поместить на экране, и самое поганое - чтобы отрендеренная модель на этой текстуре отображалась нормально, но была с полностью прозрачным фоном.
Пока нашел два варианта. Первый - самый простой - просто вывести текстуру на экран. В этом случае фона от рендера позади отрендеренной модели не видно, но сама текстура будто с альфой 0.5
Затем нашел популярный скрипт с шейдером и пострендером, который вырубает у рендер текстуры альфу вообще - тогда модель на этой рендер текстуре становится без альфы, но при этом у самой текстуры начинается рендериться "пустой синий фон" позади модели

Вот как бы добиться рендера на подобии такого http://portal.aecorp.in/wp-content/u...-Selection.jpg
Когда модель рендерится поверх GUI, но при этом она не прозрачная, НО с прозрачным фоном, через который видно GUI-окно позади нее

Уже мозг сломал, пытаясь решить проблему

Nuprahtor 06.02.2013 17:54

Ответ: Вопросы от новичка
 
А не пробовал снимать рендер текстуры с камеры, которая рендерит только нужную модель? Настроить модели определенный слой, и камере поставить только рендеринг этого слоя.

Amatsu 06.02.2013 18:00

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Nuprahtor (Сообщение 251931)
А не пробовал снимать рендер текстуры с камеры, которая рендерит только нужную модель? Настроить модели определенный слой, и камере поставить только рендеринг этого слоя.

Я именно так и рендерю. И камера у меня рендерит по сути только одну модель, позади модели в рендер попадает лишь "обще-мировой" фон, который определяется через clear flag камеры (например Color или SolidColor). И все бы хорошо - в рендер текстуре этот фон получается совершенно прозрачным. Вот только отрендеренная модель при этом так же прозрачна (хотя на сцене она вообще с шейдером Diffuse), будто в сцене перед рендером кто-то выставил альфу 0.5

То есть смотри приведенный мной скрин из дьяблы - представь что модель монаха на нем просвечивает будто с альфой 0.5 и сквозь нее видно гуишное окно

Если же я тем хитрым скриптом вырубаю альфу у рендер текстуры - то помимо уже ставшей нормальной модели на рендер текстуре проявляется и тот самый фон камеры, описанный в clear flag. То есть опять же - посмотри на этот скрин из дьяблы и представь, что монах стал "плотным", не прозрачным, но при этом он висит на черном или синем фоне на всю площадь отображенной через гуи рендер-текстуры (как если бы ты картинке с прозрачным фоном в фотошопе поставил не прозрачный бэкграунд)

pax 06.02.2013 20:23

Ответ: Вопросы от новичка
 
А зачем GUI.DrawTexture? Просто выключи камеру, рендерящую модель и прям в OnGUI вызови camera.Render() предварительно задав ей pixelRect. Это можно сделать только в событии Repaint.

Amatsu 06.02.2013 22:13

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от pax (Сообщение 251946)
А зачем GUI.DrawTexture? Просто выключи камеру, рендерящую модель и прям в OnGUI вызови camera.Render() предварительно задав ей pixelRect. Это можно сделать только в событии Repaint.

У меня GUI-окна могут в любом порядке перекрывать окно с отрендеренным персонажем

В принципе уже разобрался с проблемой - пришлось немного подшаманить сам шейдер модели. Уже не думал, что именно в нем затык был

mauNgerS 07.02.2013 00:06

Ответ: Вопросы от новичка
 
Вложений: 1
На объекте Player висит скрипт:

PHP код:

public class Door MonoBehaviour {
    public 
Animation d;

    
void Start () 
    {
        
d=GetComponentInChildren<Animation>();
        
d.animation.Play("1"); 
    }


Как запустить анимацию?

seaman 07.02.2013 02:17

Ответ: Вопросы от новичка
 
А где, собственно, компонент Animation? Вы его ищете на детях, а где он на детях?- нет его...

WISHMASTER35 07.02.2013 03:27

Ответ: Вопросы от новичка
 
Анимацию на объекте вообще искать не надо. Просто обращаться к ней через свойство animation.
А никто не делал вертолет? Сделал к точке пропеллера силу
Код:

float finalForce = Physics.gravity.magnitude*force;
Vector3 dir = Quaternion.Euler(angles) * mainRotor.transform.up;
rigidbody.AddForceAtPosition(dir*finalForce, mainRotor.transform.position, ForceMode.Acceleration);

angles это небольшой наклон пропеллера. Но если этот наклон будет постоянный, то вертолет переворачивается.
Конечно можно просто вручную контролировать наклон вертолета, но вряд ли что хорошее получится. Да и при столкновении вертолет уже имеет право перевернуться.

pax 07.02.2013 07:19

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от Amatsu (Сообщение 251966)
У меня GUI-окна могут в любом порядке перекрывать окно с отрендеренным персонажем

А в чем проблема то? Камера выключена, рисуется в том же месте что и GUI.DrawTexture, только вызывается camera.Render(). И не нужна рендертекстура. Я так в GUI рисовал сталкера в интерфейсе (скрины ты видел).

Amatsu 07.02.2013 09:20

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от pax (Сообщение 252012)
А в чем проблема то? Камера выключена, рисуется в том же месте что и GUI.DrawTexture, только вызывается camera.Render(). И не нужна рендертекстура. Я так в GUI рисовал сталкера в интерфейсе (скрины ты видел).

Да уже понял, о чем ты. Но решил проблему через RenderTexture. К тому же в твоем случае если окно с отрендеренным персонажем спокойно ездит по экрану - я так понимаю надо и камеру с моделью как-то смещать, чтобы его позиция отрисовывалась всегда в нужной позиции экрана (или я до конца не догнал технологию). С рендертекстурой как-то надежнее - модель и камера всегда в одних координатах, где бы ни находилось нужное GUI-окно

pax 07.02.2013 09:28

Ответ: Вопросы от новичка
 
Я же написал выше что для камеры тоже надо задавать pixelRect как и для GUI.DrawTexture, единственное этот рект отличается немного (инвертирован по высоте на сколько я помню).

Amatsu 07.02.2013 12:01

Ответ: Вопросы от новичка
 
Цитата:

Сообщение от pax (Сообщение 252018)
Я же написал выше что для камеры тоже надо задавать pixelRect как и для GUI.DrawTexture, единственное этот рект отличается немного (инвертирован по высоте на сколько я помню).

К слову, попробовал щас влезть в этот iGUI. Я просто гуглил что компонент Image они выводят через GUI.DrawTexture, но на вскидку не нашел, где он вызывается. Надо лезть в их классы, смотреть их пробросы методов. Проще рендертекстурой ограничиться

seaman 07.02.2013 13:13

Ответ: Вопросы от новичка
 
Код:

namespace iGUI
{
    using System;
    using UnityEngine;

    public class iGUIImage : iGUIElement
    {
        public bool alpha = true;
        public float aspectRatio = 0f;
        public Texture image;
        public ScaleMode scaleMode;

        internal override void draw()
        {
            this.beforeDraw();
            if (this.image != null)
            {
                Color backgroundColor = base.backgroundColor;
                backgroundColor.a = GUI.color.a;
                GUI.color = backgroundColor;
                GUI.DrawTexture(base.rect, this.image, this.scaleMode, this.alpha, this.aspectRatio);
                GUI.Label(base.rect, base.label);
                GUI.color = base.newColor;
            }
            base.draw();
        }

        public override void onCreate()
        {
            if ((Mathf.Approximately(this.positionAndSize.x, 0.5f) && Mathf.Approximately(this.positionAndSize.y, 0.5f)) && (Mathf.Approximately(this.positionAndSize.width, 0.5f) && Mathf.Approximately(this.positionAndSize.height, 0.5f)))
            {
                this.positionAndSize.width = 1f;
                this.positionAndSize.height = 1f;
            }
            if (!Application.isPlaying && (this.image == null))
            {
                this.image = iGUIRoot.getTexture("iGUILogoTransparent");
                base.label.text = "";
            }
        }
    }
}



Часовой пояс GMT +4, время: 20:48.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot