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=15951)

radiobutton 01.12.2011 23:53

Стандартное блицевское освещение
 
Собственно вопрос такой. Посмотрите на рисунок.



Как сделать такой свет чтобы полигоны расположенные в разных плоскостях освещались по разному, а не сливались в 1-ну плоскую двумерную фигуру.

Кому не понятно вот можете запустить этот код.
Двигать камеру на WASD. Крутить камеру можно зажав Правую клавишу мыши и двигая мышью.

Код:

Type Wall
Field doors[100]
Field x,y,z,xd,yd,zd
Field mesh
End Type

Global MainCamera

Graphics3D 640,480
SetBuffer BackBuffer()
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

TestData()

light=CreateLight(1)
RotateEntity light,45,0,0
AmbientLight 127,127,127

;a=CreateCube()
;PositionEntity a, 0,3,0
;b=CreatePlane()
;EntityColor b,150,200,150

MainCamera = CreateCamera()
MoveEntity MainCamera, 0,1,-10
TurnEntity MainCamera,0,0,0

Repeat
b.wall = First wall
;TurnEntity b\mesh,0,0.3,0
UpdateCamera(MainCamera)
TurnEntity light,0,3,0
RenderWorld

Text 10,10,EntityRoll#(MainCamera)+" "+EntityYaw#(MainCamera)+" "+EntityPitch#(MainCamera)
Flip
Until KeyHit(1)
End

Function UpdateCamera(cam)
x#=MouseXSpeed()
y#=MouseYSpeed()
If MouseHit(2)
        x#=0
        y#=0
End If
If MouseDown(2)
        RotateEntity cam,y/5.+EntityPitch#(cam),-x/5.+EntityYaw#(cam),0
        If EntityPitch#(cam)>70
                RotateEntity cam,70,EntityYaw#(cam),0
        End If
        If EntityPitch#(cam)<-70
                RotateEntity cam,-70,EntityYaw#(cam),0
        End If
        MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
End If

If KeyDown(17)
        MoveEntity cam, 0,0,0.2
End If
If KeyDown(31)
        MoveEntity cam, 0,0,-0.2
End If
If KeyDown(30)
        MoveEntity cam, -0.2,0,0
End If
If KeyDown(32)
        MoveEntity cam, 0.2,0,0
End If

End Function

Function AddPolyToSurf(x1#,x2#,x3#,y1#,y2#,y3#,z1#,z2#,z3#,d1#,d2#,d3#,surf)
v0 = AddVertex (surf,x1,x2,x3, 0 ,0)
v1 = AddVertex (surf,y1,y2,y3, 0.5,1)
v2 = AddVertex (surf, z1,z2,z3, 1 ,0)
tri = AddTriangle (surf,v0,v1,v2)

v0 = AddVertex (surf,x1,x2,x3, 0 ,0)
v1 = AddVertex (surf, z1,z2,z3, 0.5,1)
v2 = AddVertex (surf, d1,d2,d3, 1 ,0)
tri = AddTriangle (surf,v0,v1,v2)
End Function

Function AddCubeToSurf(x#,y#,z#,x1#,y1#,z1#,surf)
AddPolyToSurf(x,y,z,x,y+y1,z,x+x1,y+y1,z,x+x1,y,z,surf)
AddPolyToSurf(x,y,z,x,y,z+z1,x,y+y1,z+z1,x,y+y1,z,surf)
AddPolyToSurf(x,y,z,x+x1,y,z,x+x1,y,z+z1,x,y,z+z1,surf)
AddPolyToSurf(x,y,z+z1,x+x1,y,z+z1,x+x1,y+y1,z+z1,x,y+y1,z+z1,surf)
AddPolyToSurf(x+x1,y,z,x+x1,y+y1,z,x+x1,y+y1,z+z1,x+x1,y,z+z1,surf)
AddPolyToSurf(x,y+y1,z,x,y+y1,z+z1,x+x1,y+y1,z+z1,x+x1,y+y1,z,surf)
End Function

Function TestData()
a.wall = New wall
a\x=-7:a\y=-3:a\z=3
a\xd=15:a\yd=7:a\zd=1
a\doors[0]=3

a\doors[1]=1
a\doors[2]=1
a\doors[3]=2
a\doors[4]=3

a\doors[11]=5
a\doors[12]=2
a\doors[13]=3
a\doors[14]=4

a\doors[21]=10
a\doors[22]=1
a\doors[23]=2
a\doors[24]=5
CreateWall(a)
End Function

Function CreateWall(a.wall)
a\mesh = CreateMesh()
surf = CreateSurface(a\mesh)
x=a\x:y=a\y:z=a\z:x1=a\xd:y1=a\yd:z1=a\zd

AddPolyToSurf(x,y,z,x,y,z+z1,x,y+y1,z+z1,x,y+y1,z,surf)
AddPolyToSurf(x,y,z,x+x1,y,z,x+x1,y,z+z1,x,y,z+z1,surf)
AddPolyToSurf(x+x1,y,z,x+x1,y+y1,z,x+x1,y+y1,z+z1,x+x1,y,z+z1,surf)
AddPolyToSurf(x,y+y1,z,x,y+y1,z+z1,x+x1,y+y1,z+z1,x+x1,y+y1,z,surf)

xt=0
For i=1 To a\doors[0]
        x2=a\doors[10*(i-1)+1]
        y2=a\doors[10*(i-1)+2]
        xd2=a\doors[10*(i-1)+3]
        yd2=a\doors[10*(i-1)+4]
        AddPolyToSurf(xt+x,y,z,xt+x,y+y1,z,x+x2,y+y1,z,x+x2,y,z,surf)
        AddPolyToSurf(xt+x,y,z+z1,x+x2,y,z+z1,x+x2,y+y1,z+z1,xt+x,y+y1,z+z1,surf)       
        If y2+yd2<y1
                AddPolyToSurf(x+x2,y+y2+yd2,z,x+x2,y+y1,z,x+x2+xd2,y+y1,z,x+x2+xd2,y+y2+yd2,z,surf)       
                AddPolyToSurf(x+x2,y+y2+yd2,z+z1,x+x2+xd2,y+y2+yd2,z+z1,x+x2+xd2,y+y1,z+z1,x+x2,y+y1,z+z1,surf)       
        End If
        If y2>0       
                AddPolyToSurf(x+x2,y,z,x+x2,y+y2,z,x+x2+xd2,y+y2,z,x+x2+xd2,y,z,surf)
                AddPolyToSurf(x+x2,y,z+z1,x+x2+xd2,y,z+z1,x+x2+xd2,y+y2,z+z1,x+x2,y+y2,z+z1,surf)
        End If
       
        AddPolyToSurf(x+x2,y+y2+yd2,z,x+x2+xd2,y+y2+yd2,z,x+x2+xd2,y+y2+yd2,z+z1,x+x2,y+y2+yd2,z+z1,surf)
        AddPolyToSurf(x+x2,y+y2,z,x+x2,y+y2,z+z1,x+x2+xd2,y+y2,z+z1,x+x2+xd2,y+y2,z,surf)
       
        AddPolyToSurf(x+x2,y+y2,z,x+x2,y+y2+yd2,z,x+x2,y+y2+yd2,z+z1,x+x2,y+y2,z+z1,surf)
        AddPolyToSurf(x+x2+xd2,y+y2,z,x+x2+xd2,y+y2,z+z1,x+x2+xd2,y+y2+yd2,z+z1,x+x2+xd2,y+y2+yd2,z,surf)
       
        xt=x2+xd2
Next
AddPolyToSurf(xt+x,y,z,xt+x,y+y1,z,x+x1,y+y1,z,x+x1,y,z,surf)
AddPolyToSurf(xt+x,y,z+z1,x+x1,y,z+z1,x+x1,y+y1,z+z1,xt+x,y+y1,z+z1,surf)
End Function


dsd 01.12.2011 23:59

Ответ: Стандартное блицевское освещение
 
Сделать источник света не дирекшионал, а спот? Не?

Ха-ха. UpdateNormals() не хочешь попробовать?
Добавь его перед главным циклом. Обновлять нормали для этого a\mesh. Зачем это нужно? Потому что у твоей новой геометрии нормали 0,0,0. А затенение рассчитывается углом между светом и нормалью, но результат от такой нормали оставит только амбиент свет, и все твоя новыя геометрия будет рисоваться плоско.

Nuprahtor 02.12.2011 00:12

Ответ: Стандартное блицевское освещение
 
Настроить группы сглаживания на модели и помнить, что освещение повертексное

dsd 02.12.2011 00:20

Ответ: Стандартное блицевское освещение
 


Type Wall
Field doors[100]
Field x,y,z,xd,yd,zd
Field mesh
End Type

Global MainCamera

Graphics3D 640,480
SetBuffer BackBuffer()
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

TestData()

light=CreateLight(1)
RotateEntity light,45,0,0
AmbientLight 127,127,127

;a=CreateCube()
;PositionEntity a, 0,3,0
;b=CreatePlane()
;EntityColor b,150,200,150

MainCamera = CreateCamera()
MoveEntity MainCamera, 0,1,-10
TurnEntity MainCamera,0,0,0

Repeat
b.wall = First wall
;TurnEntity b\mesh,0,0.3,0
UpdateCamera(MainCamera)
TurnEntity light,0,3,0
RenderWorld

Text 10,10,EntityRoll#(MainCamera)+" "+EntityYaw#(MainCamera)+" "+EntityPitch#(MainCamera)
Flip
Until KeyHit(1)
End

Function UpdateCamera(cam)
x#=MouseXSpeed()
y#=MouseYSpeed()
If MouseHit(2)
x#=0
y#=0
End If
If MouseDown(2)
RotateEntity cam,y/5.+EntityPitch#(cam),-x/5.+EntityYaw#(cam),0
If EntityPitch#(cam)>70
RotateEntity cam,70,EntityYaw#(cam),0
End If
If EntityPitch#(cam)<-70
RotateEntity cam,-70,EntityYaw#(cam),0
End If
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
End If

If KeyDown(17)
MoveEntity cam, 0,0,0.2
End If
If KeyDown(31)
MoveEntity cam, 0,0,-0.2
End If
If KeyDown(30)
MoveEntity cam, -0.2,0,0
End If
If KeyDown(32)
MoveEntity cam, 0.2,0,0
End If

End Function

Function AddPolyToSurf(x1#,x2#,x3#,y1#,y2#,y3#,z1#,z2#,z3#, d1#,d2#,d3#,surf)
v0 = AddVertex (surf,x1,x2,x3, 0 ,0)
v1 = AddVertex (surf,y1,y2,y3, 0.5,1)
v2 = AddVertex (surf, z1,z2,z3, 1 ,0)
tri = AddTriangle (surf,v0,v1,v2)

v0 = AddVertex (surf,x1,x2,x3, 0 ,0)
v1 = AddVertex (surf, z1,z2,z3, 0.5,1)
v2 = AddVertex (surf, d1,d2,d3, 1 ,0)
tri = AddTriangle (surf,v0,v1,v2)
End Function

Function AddCubeToSurf(x#,y#,z#,x1#,y1#,z1#,surf)
AddPolyToSurf(x,y,z,x,y+y1,z,x+x1,y+y1,z,x+x1,y,z, surf)
AddPolyToSurf(x,y,z,x,y,z+z1,x,y+y1,z+z1,x,y+y1,z, surf)
AddPolyToSurf(x,y,z,x+x1,y,z,x+x1,y,z+z1,x,y,z+z1, surf)
AddPolyToSurf(x,y,z+z1,x+x1,y,z+z1,x+x1,y+y1,z+z1, x,y+y1,z+z1,surf)
AddPolyToSurf(x+x1,y,z,x+x1,y+y1,z,x+x1,y+y1,z+z1, x+x1,y,z+z1,surf)
AddPolyToSurf(x,y+y1,z,x,y+y1,z+z1,x+x1,y+y1,z+z1, x+x1,y+y1,z,surf)
End Function

Function TestData()
a.wall = New wall
a\x=-7:a\y=-3:a\z=3
a\xd=15:a\yd=7:a\zd=1
a\doors[0]=3

a\doors[1]=1
a\doors[2]=1
a\doors[3]=2
a\doors[4]=3

a\doors[11]=5
a\doors[12]=2
a\doors[13]=3
a\doors[14]=4

a\doors[21]=10
a\doors[22]=1
a\doors[23]=2
a\doors[24]=5
CreateWall(a)
End Function

Function CreateWall(a.wall)
a\mesh = CreateMesh()
surf = CreateSurface(a\mesh)
x=a\x:y=a\y:z=a\z:x1=a\xd:y1=a\yd:z1=a\zd

AddPolyToSurf(x,y,z,x,y,z+z1,x,y+y1,z+z1,x,y+y1,z, surf)
AddPolyToSurf(x,y,z,x+x1,y,z,x+x1,y,z+z1,x,y,z+z1, surf)
AddPolyToSurf(x+x1,y,z,x+x1,y+y1,z,x+x1,y+y1,z+z1, x+x1,y,z+z1,surf)
AddPolyToSurf(x,y+y1,z,x,y+y1,z+z1,x+x1,y+y1,z+z1, x+x1,y+y1,z,surf)

xt=0
For i=1 To a\doors[0]
x2=a\doors[10*(i-1)+1]
y2=a\doors[10*(i-1)+2]
xd2=a\doors[10*(i-1)+3]
yd2=a\doors[10*(i-1)+4]
AddPolyToSurf(xt+x,y,z,xt+x,y+y1,z,x+x2,y+y1,z,x+x 2,y,z,surf)
AddPolyToSurf(xt+x,y,z+z1,x+x2,y,z+z1,x+x2,y+y1,z+ z1,xt+x,y+y1,z+z1,surf)
If y2+yd2<y1
AddPolyToSurf(x+x2,y+y2+yd2,z,x+x2,y+y1,z,x+x2+xd2 ,y+y1,z,x+x2+xd2,y+y2+yd2,z,surf)
AddPolyToSurf(x+x2,y+y2+yd2,z+z1,x+x2+xd2,y+y2+yd2 ,z+z1,x+x2+xd2,y+y1,z+z1,x+x2,y+y1,z+z1,surf)
End If
If y2>0
AddPolyToSurf(x+x2,y,z,x+x2,y+y2,z,x+x2+xd2,y+y2,z ,x+x2+xd2,y,z,surf)
AddPolyToSurf(x+x2,y,z+z1,x+x2+xd2,y,z+z1,x+x2+xd2 ,y+y2,z+z1,x+x2,y+y2,z+z1,surf)
End If

AddPolyToSurf(x+x2,y+y2+yd2,z,x+x2+xd2,y+y2+yd2,z, x+x2+xd2,y+y2+yd2,z+z1,x+x2,y+y2+yd2,z+z1,surf)
AddPolyToSurf(x+x2,y+y2,z,x+x2,y+y2,z+z1,x+x2+xd2, y+y2,z+z1,x+x2+xd2,y+y2,z,surf)

AddPolyToSurf(x+x2,y+y2,z,x+x2,y+y2+yd2,z,x+x2,y+y 2+yd2,z+z1,x+x2,y+y2,z+z1,surf)
AddPolyToSurf(x+x2+xd2,y+y2,z,x+x2+xd2,y+y2,z+z1,x +x2+xd2,y+y2+yd2,z+z1,x+x2+xd2,y+y2+yd2,z,surf)

xt=x2+xd2
Next
AddPolyToSurf(xt+x,y,z,xt+x,y+y1,z,x+x1,y+y1,z,x+x 1,y,z,surf)
AddPolyToSurf(xt+x,y,z+z1,x+x1,y,z+z1,x+x1,y+y1,z+ z1,xt+x,y+y1,z+z1,surf)
UpdateNormals a\mesh
End Function


Но вообще лучше нормали ручками ставить командой VertexNormal. Ибо автоматом оно для такой угловатой модели не то считает

radiobutton 02.12.2011 00:33

Ответ: Стандартное блицевское освещение
 
Цитата:

Сообщение от dsd (Сообщение 211912)


Type Wall
Field doors[100]
Field x,y,z,xd,yd,zd
Field mesh
End Type

Global MainCamera

Graphics3D 640,480
SetBuffer BackBuffer()
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2

TestData()

light=CreateLight(1)
RotateEntity light,45,0,0
AmbientLight 127,127,127

;a=CreateCube()
;PositionEntity a, 0,3,0
;b=CreatePlane()
;EntityColor b,150,200,150

MainCamera = CreateCamera()
MoveEntity MainCamera, 0,1,-10
TurnEntity MainCamera,0,0,0

Repeat
b.wall = First wall
;TurnEntity b\mesh,0,0.3,0
UpdateCamera(MainCamera)
TurnEntity light,0,3,0
RenderWorld

Text 10,10,EntityRoll#(MainCamera)+" "+EntityYaw#(MainCamera)+" "+EntityPitch#(MainCamera)
Flip
Until KeyHit(1)
End

Function UpdateCamera(cam)
x#=MouseXSpeed()
y#=MouseYSpeed()
If MouseHit(2)
x#=0
y#=0
End If
If MouseDown(2)
RotateEntity cam,y/5.+EntityPitch#(cam),-x/5.+EntityYaw#(cam),0
If EntityPitch#(cam)>70
RotateEntity cam,70,EntityYaw#(cam),0
End If
If EntityPitch#(cam)<-70
RotateEntity cam,-70,EntityYaw#(cam),0
End If
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
End If

If KeyDown(17)
MoveEntity cam, 0,0,0.2
End If
If KeyDown(31)
MoveEntity cam, 0,0,-0.2
End If
If KeyDown(30)
MoveEntity cam, -0.2,0,0
End If
If KeyDown(32)
MoveEntity cam, 0.2,0,0
End If

End Function

Function AddPolyToSurf(x1#,x2#,x3#,y1#,y2#,y3#,z1#,z2#,z3#, d1#,d2#,d3#,surf)
v0 = AddVertex (surf,x1,x2,x3, 0 ,0)
v1 = AddVertex (surf,y1,y2,y3, 0.5,1)
v2 = AddVertex (surf, z1,z2,z3, 1 ,0)
tri = AddTriangle (surf,v0,v1,v2)

v0 = AddVertex (surf,x1,x2,x3, 0 ,0)
v1 = AddVertex (surf, z1,z2,z3, 0.5,1)
v2 = AddVertex (surf, d1,d2,d3, 1 ,0)
tri = AddTriangle (surf,v0,v1,v2)
End Function

Function AddCubeToSurf(x#,y#,z#,x1#,y1#,z1#,surf)
AddPolyToSurf(x,y,z,x,y+y1,z,x+x1,y+y1,z,x+x1,y,z, surf)
AddPolyToSurf(x,y,z,x,y,z+z1,x,y+y1,z+z1,x,y+y1,z, surf)
AddPolyToSurf(x,y,z,x+x1,y,z,x+x1,y,z+z1,x,y,z+z1, surf)
AddPolyToSurf(x,y,z+z1,x+x1,y,z+z1,x+x1,y+y1,z+z1, x,y+y1,z+z1,surf)
AddPolyToSurf(x+x1,y,z,x+x1,y+y1,z,x+x1,y+y1,z+z1, x+x1,y,z+z1,surf)
AddPolyToSurf(x,y+y1,z,x,y+y1,z+z1,x+x1,y+y1,z+z1, x+x1,y+y1,z,surf)
End Function

Function TestData()
a.wall = New wall
a\x=-7:a\y=-3:a\z=3
a\xd=15:a\yd=7:a\zd=1
a\doors[0]=3

a\doors[1]=1
a\doors[2]=1
a\doors[3]=2
a\doors[4]=3

a\doors[11]=5
a\doors[12]=2
a\doors[13]=3
a\doors[14]=4

a\doors[21]=10
a\doors[22]=1
a\doors[23]=2
a\doors[24]=5
CreateWall(a)
End Function

Function CreateWall(a.wall)
a\mesh = CreateMesh()
surf = CreateSurface(a\mesh)
x=a\x:y=a\y:z=a\z:x1=a\xd:y1=a\yd:z1=a\zd

AddPolyToSurf(x,y,z,x,y,z+z1,x,y+y1,z+z1,x,y+y1,z, surf)
AddPolyToSurf(x,y,z,x+x1,y,z,x+x1,y,z+z1,x,y,z+z1, surf)
AddPolyToSurf(x+x1,y,z,x+x1,y+y1,z,x+x1,y+y1,z+z1, x+x1,y,z+z1,surf)
AddPolyToSurf(x,y+y1,z,x,y+y1,z+z1,x+x1,y+y1,z+z1, x+x1,y+y1,z,surf)

xt=0
For i=1 To a\doors[0]
x2=a\doors[10*(i-1)+1]
y2=a\doors[10*(i-1)+2]
xd2=a\doors[10*(i-1)+3]
yd2=a\doors[10*(i-1)+4]
AddPolyToSurf(xt+x,y,z,xt+x,y+y1,z,x+x2,y+y1,z,x+x 2,y,z,surf)
AddPolyToSurf(xt+x,y,z+z1,x+x2,y,z+z1,x+x2,y+y1,z+ z1,xt+x,y+y1,z+z1,surf)
If y2+yd2<y1
AddPolyToSurf(x+x2,y+y2+yd2,z,x+x2,y+y1,z,x+x2+xd2 ,y+y1,z,x+x2+xd2,y+y2+yd2,z,surf)
AddPolyToSurf(x+x2,y+y2+yd2,z+z1,x+x2+xd2,y+y2+yd2 ,z+z1,x+x2+xd2,y+y1,z+z1,x+x2,y+y1,z+z1,surf)
End If
If y2>0
AddPolyToSurf(x+x2,y,z,x+x2,y+y2,z,x+x2+xd2,y+y2,z ,x+x2+xd2,y,z,surf)
AddPolyToSurf(x+x2,y,z+z1,x+x2+xd2,y,z+z1,x+x2+xd2 ,y+y2,z+z1,x+x2,y+y2,z+z1,surf)
End If

AddPolyToSurf(x+x2,y+y2+yd2,z,x+x2+xd2,y+y2+yd2,z, x+x2+xd2,y+y2+yd2,z+z1,x+x2,y+y2+yd2,z+z1,surf)
AddPolyToSurf(x+x2,y+y2,z,x+x2,y+y2,z+z1,x+x2+xd2, y+y2,z+z1,x+x2+xd2,y+y2,z,surf)

AddPolyToSurf(x+x2,y+y2,z,x+x2,y+y2+yd2,z,x+x2,y+y 2+yd2,z+z1,x+x2,y+y2,z+z1,surf)
AddPolyToSurf(x+x2+xd2,y+y2,z,x+x2+xd2,y+y2,z+z1,x +x2+xd2,y+y2+yd2,z+z1,x+x2+xd2,y+y2+yd2,z,surf)

xt=x2+xd2
Next
AddPolyToSurf(xt+x,y,z,xt+x,y+y1,z,x+x1,y+y1,z,x+x 1,y,z,surf)
AddPolyToSurf(xt+x,y,z+z1,x+x1,y,z+z1,x+x1,y+y1,z+ z1,xt+x,y+y1,z+z1,surf)
UpdateNormals a\mesh
End Function


Но вообще лучше нормали ручками ставить командой VertexNormal. Ибо автоматом оно для такой угловатой модели не то считает

Нормаль нада ставить так, чтобы она была перпендикулярна полигону в котором эта вершина?

dsd 02.12.2011 00:41

Ответ: Стандартное блицевское освещение
 
В общем да. И длину ей 1 ставь.

Кстати с твоим стилем писания кода лучше бросить блиц и взять хотя бы блицмакс.

radiobutton 02.12.2011 00:57

Ответ: Стандартное блицевское освещение
 
Цитата:

Сообщение от dsd (Сообщение 211919)
В общем да. И длину ей 1 ставь.

Кстати с твоим стилем писания кода лучше бросить блиц и взять хотя бы блицмакс.

почему?)

я к блицу привык. Мне не нужны продвинутые возможности для того, что я щас задумал написать.

dsd 02.12.2011 01:10

Ответ: Стандартное блицевское освещение
 
Это аргумент из серии: я как бобер бревно перегрызу нахрена мне эта мистическая бензопила и так няшно.

radiobutton 02.12.2011 01:46

Ответ: Стандартное блицевское освещение
 
Цитата:

Сообщение от dsd (Сообщение 211925)
Это аргумент из серии: я как бобер бревно перегрызу нахрена мне эта мистическая бензопила и так няшно.

Ну это уже мои проблемы :)

Вроде работает +)



Спасибо за помощь.

dsd 02.12.2011 02:14

Ответ: Стандартное блицевское освещение
 
А теперь текстурные координаты добавь :trollface:
VertexTexCoords(). Ты же собираешься потом текстуру наложить :-D

Что бы без особых заморочек было. если нормаль +/-1,0,0 Или русским языком смотрит по оси икс, то текстурные координаты y & z;
0,+/-1,0 x & z; 0,0,+/-1 x & y. А если у тебя нормали не по осям то проще будет модель в нормальном редакторе сделать и не заниматься херомантией.

radiobutton 02.12.2011 04:29

Ответ: Стандартное блицевское освещение
 

как вам такой набор параметров для света? :)

light=CreateLight(1)
RotateEntity Light,45,50,0
AmbientLight 107,107,107
LightColor light,140,100,70


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

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