forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Имитация водной поверхности. (http://forum.boolean.name/showthread.php?t=15000)

Program23 02.07.2011 18:06

Ответ: Имитация водной поверхности.
 
Вложений: 1
Нашел баг.
Кажется, генератор не дорисовал картинку)
Вложение 14264

dsd 02.07.2011 18:07

Ответ: Имитация водной поверхности.
 
Не это я на высоте 0 отметку даю таким цветом :) В той точке ровно ноль :)

А, я не могу, оно оказывается еще и бесшовную текстуру рожает :-D.

dsd 02.07.2011 21:07

Ответ: Имитация водной поверхности.
 

Второй эскиз террэйна.

dsd 03.07.2011 18:45

Ответ: Имитация водной поверхности.
 
Написал первый порношейдер методом... В общем, неправильным методом :-D. Делает он следующее рисует текстуру и все. Потом мне захотелось добавить функциональности в вершинный шейдер, сделал ввод переменной из хорса в шейдер. Далее решил умножить координаты вертексов на синус от введенной переменной.

PHP код:

//Матрицы
//xSetEffectMatrixSemantic tModel,"MatWorldViewProj",WORLDVIEWPROJ
//xSetEffectMatrixSemantic tModel,"MatWorld",WORLD
float4x4 MatWorldViewProj;
float4x4 MatWorld;

// вношу время из хорса
float time;

// Объявление переменных в данном случае вывод пиксельного шейдера
static float3 Color;
static 
float4 cD;

//Передача тестуры в шейдер
//xSetEffectTexture tModel,    "InShaderTextureName",texDiffuse
const texture InShaderTextureName;            
sampler TexDiffuse=sampler_state //тут я говорю что текстура Diffuse типа
    
Texture   = <InShaderTextureName>;
   };


//######  Ввод в вершинный шейдер  ##################
struct VertexShaderInput {
   
float4 Position POSITION0;     // мировая позиция вершины
   
float3 Normal NORMAL;            // нормаль к этой вершине
   
float2 TexCoords TEXCOORD0;     // координаты точки на текстуре
};
//#  Вывод вершинного шейдера = ввод пиксельного  ###
struct PixelShaderInput {
    
float4 Position POSITION0;    //новая мировая позиция вершины
    
float4 pWorld TEXCOORD0;
    
float3 Normal TEXCOORD1;
    
float2 TexCoords TEXCOORD2;
};


//вершинный шейдер
void NameOfVertexShaderFunctionin VertexShaderInput INout PixelShaderInput OUT ) {
    
//OUT.Position    = mul((mul(IN.Position,MatWorldViewProj)),cos(time));
    
[b]OUT.Position    mul(IN.Position,MatWorldViewProj)*cos(time);[/b]
    
OUT.pWorld        mul(IN.Position,MatWorld);
    
OUT.Normal        normalize(mul(IN.Normal,MatWorld));
    
OUT.TexCoords    IN.TexCoords;
}

//пиксельный шейдер
float4 NameOfPixelShaderin PixelShaderInput IN ) : COLOR {
    
cD            tex2D(TexDiffuse,IN.TexCoords);
    
Color        cD.rgb;    
    return 
float4(Color,cD.a);
}


//##################  Technique  ##################
// здесь расположен проход этот кусок заставляет исполняться шейдер
//xSetEffectTechnique tModel,"TechniqueName"
technique TechniqueName {
    
pass p0 //проход рендера их может быть несколько с разными шейдерами
        
AlphaBlendEnablefalse;
        
vertexshader    compile vs_2_0 NameOfVertexShaderFunction(); 
        
pixelshader        compile ps_2_0 NameOfPixelShader();
    }


Но вместо плавного морфинга получилось моргание меша, на который применен мой чудо шейдер, это от того что в float4 Position : POSITION0; есть еще и W и умножение на синус и дает такой чудный эффект моргания?

dsd 03.07.2011 21:19

Ответ: Имитация водной поверхности.
 

рэвин хорстридэ и начинающий его юзер

h1dd3n 04.07.2011 03:10

Ответ: Имитация водной поверхности.
 
Эммм дак ты нифига себе че делаешь то)) Ты сначала умножаешь координаты вертекса на ввп матрицу, а ПОТОМ умножаешь на косинустайм. Есстественно на экране будет ппц что...
Тебе надо сначала умножить координаты так как хочешь, а потом уже умножать на матрицу.
Примерно так:
Код:

v2f o;

float CosTime = (cos(_Time.y) * 0.5 + 0.5);
o.pos = v.vertex;
o.pos.xyz = o.pos.xyz * CosTime;
o.pos = mul(UNITY_MATRIX_MVP, o.pos);
                                       
return o;

_Time.y это то что у тебя просто time.

HolyDel 04.07.2011 12:47

Ответ: Имитация водной поверхности.
 
Цитата:

POSITION0; есть еще и W и умножение на синус и дает такой чудный эффект моргания?
совершенно верно! яже говорил уже тебе, что на ето W будет потом делиться все остальные компоненты. меш типа увеличивается в бесконечноть? умножай только первые три компоненты, а четвертую не трож.



фу hlsl
столько лишней писанины

dsd 04.07.2011 14:01

Ответ: Имитация водной поверхности.
 
Проще разделять координаты оперируя координата.x, координата.y, координата.z или получить вектор позиции A(x,y,z,w), потом уже работать с ним? Если допустим хочу сжать модель по Z в два раза то получаю итоговый вектор В(x,y,0.5*z,w) и с ним уже имею конструкцию выводящую из вертексного шейдера: OUT.Position = mul(В(x,y,0.5*z,w),MatWorld)?
И как я понимаю в OUT.Position будет записана не координата в позиции меша, а координата вертекса относительно глобальных мировых координат сцены?

Вот это должно сжать модель по Зед, так или не так?
mul(mul(IN.Position,B(1,1,0.5,1)),MatWorld)

moka 04.07.2011 14:40

Ответ: Имитация водной поверхности.
 
Код:

mul(float4((IN.Position.xyz * float3(1.0,1.0,0.5)),IN.Position.w),MatWorld).
Писал в броузере.

dsd 04.07.2011 20:32

Ответ: Имитация водной поверхности.
 
Рисую няньку гг, вроде ниче такая получается :-D

Другой ракурс с теселяцией :)

Mr_F_ 04.07.2011 21:08

Ответ: Имитация водной поверхности.
 
настолько недоделанные меши лучше не показывать. что ты хочешь о них услышать то?

moka 04.07.2011 21:11

Ответ: Имитация водной поверхности.
 
Лучше кодь, а модельки дай другим поделать или скачай с онлайна..

Reks888 04.07.2011 21:11

Ответ: Имитация водной поверхности.
 
Славу гнома хочет
Глаза то кул

dsd 04.07.2011 21:26

Ответ: Имитация водной поверхности.
 
Господа, мой код еще страшней моих моделек. Но сиськи как живые вроде :-D

Mr_F_ 04.07.2011 21:35

Ответ: Имитация водной поверхности.
 
Цитата:

Но сиськи как живые вроде
не. в кучку как-то собраны, в реале они должны больше в стороны быть направлены.
сверху ещё у тебя типа шов между ними, в реале там его практически нет (потому что они оттуда как бы расти начинают).
http://thumbs.dreamstime.com/thumbla...6161b3U3Kx.jpg

ключиц я тоже чет не вижу у него.


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

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