Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 01.12.2011, 23:53   #1
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Стандартное блицевское освещение

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



Как сделать такой свет чтобы полигоны расположенные в разных плоскостях освещались по разному, а не сливались в 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
(Offline)
 
Ответить с цитированием
Старый 01.12.2011, 23:59   #2
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Стандартное блицевское освещение

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

Ха-ха. UpdateNormals() не хочешь попробовать?
Добавь его перед главным циклом. Обновлять нормали для этого a\mesh. Зачем это нужно? Потому что у твоей новой геометрии нормали 0,0,0. А затенение рассчитывается углом между светом и нормалью, но результат от такой нормали оставит только амбиент свет, и все твоя новыя геометрия будет рисоваться плоско.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо dsd за это полезное сообщение:
Артем Валерьевич (04.12.2011), radiobutton (02.12.2011)
Старый 02.12.2011, 00:12   #3
Nuprahtor
Элита
 
Аватар для Nuprahtor
 
Регистрация: 26.07.2008
Сообщений: 1,972
Написано 1,095 полезных сообщений
(для 3,923 пользователей)
Ответ: Стандартное блицевское освещение

Настроить группы сглаживания на модели и помнить, что освещение повертексное
(Offline)
 
Ответить с цитированием
Старый 02.12.2011, 00:20   #4
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Стандартное блицевское освещение



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=a\z:x1=a\xd:y1=a\yd1=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. Ибо автоматом оно для такой угловатой модели не то считает
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
radiobutton (02.12.2011)
Старый 02.12.2011, 00:33   #5
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: Стандартное блицевское освещение

Сообщение от dsd Посмотреть сообщение


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=a\z:x1=a\xd:y1=a\yd1=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. Ибо автоматом оно для такой угловатой модели не то считает
Нормаль нада ставить так, чтобы она была перпендикулярна полигону в котором эта вершина?
(Offline)
 
Ответить с цитированием
Старый 02.12.2011, 00:41   #6
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Стандартное блицевское освещение

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

Кстати с твоим стилем писания кода лучше бросить блиц и взять хотя бы блицмакс.
(Offline)
 
Ответить с цитированием
Старый 02.12.2011, 00:57   #7
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: Стандартное блицевское освещение

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

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

я к блицу привык. Мне не нужны продвинутые возможности для того, что я щас задумал написать.
(Offline)
 
Ответить с цитированием
Старый 02.12.2011, 01:10   #8
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Стандартное блицевское освещение

Это аргумент из серии: я как бобер бревно перегрызу нахрена мне эта мистическая бензопила и так няшно.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Старый 02.12.2011, 01:46   #9
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: Стандартное блицевское освещение

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

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



Спасибо за помощь.
(Offline)
 
Ответить с цитированием
Старый 02.12.2011, 02:14   #10
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Стандартное блицевское освещение

А теперь текстурные координаты добавь
VertexTexCoords(). Ты же собираешься потом текстуру наложить

Что бы без особых заморочек было. если нормаль +/-1,0,0 Или русским языком смотрит по оси икс, то текстурные координаты y & z;
0,+/-1,0 x & z; 0,0,+/-1 x & y. А если у тебя нормали не по осям то проще будет модель в нормальном редакторе сделать и не заниматься херомантией.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
radiobutton (02.12.2011)
Старый 02.12.2011, 04:29   #11
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: Стандартное блицевское освещение


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

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

Последний раз редактировалось radiobutton, 02.12.2011 в 05:54.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com