|
3D-программирование Вопросы, касающиеся программирования 3D мира |
26.03.2010, 07:13
|
#1
|
Нуждающийся
Регистрация: 10.09.2006
Сообщений: 77
Написано 3 полезных сообщений (для 3 пользователей)
|
Меш, созданный вручную, проблема с освещением
Создал меш с помощью Addvertex и AddTriangle. Меш пока представляет из себя плоскость n*m, потом будет рельеф.
Создвл источник света
PositionEntity pivot_light,num_square_x*num_polig/2,0,num_square_y*num_polig/2
light=CreateLight(1,pivot_light)
PositionEntity light,0,20,0
LightRange light,400
Меш остаётся тёмным.
Попробовал UpdateNormals - не помогло
Попробовал вручную расставить нормали, тоже не помогло
nx#=VertexX(relief_surf,vertex)
ny#=VertexY(relief_surf,vertex)+100
nz#=VertexZ(relief_surf,vertex)
VertexNormal relief_surf,vertex,nx#,ny#,nz#
AmblientLight использовать считаю нецелесообразным, т.к. буду двигать источник света, имитируя освещение днём, вечером, ночью.
Как правильно расставить нормали?
|
(Offline)
|
|
26.03.2010, 09:54
|
#2
|
Дэвелопер
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений (для 774 пользователей)
|
Ответ: Меш, созданный вручную, проблема с освещением
пользуйся
;plane MxN
;author: avel
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
camera=CreateCamera()
PositionEntity camera,0,10,0
TurnEntity camera,90,0,0
Dim vertex(0,0)
m=CreatePlaneMN(2,3,2,1)
WireFrame 1
Repeat
If KeyHit(1) Then Exit
UpdateWorld()
RenderWorld()
Flip
Forever
End
Function CreatePlaneMN(m=1,n=1,dm=1,dn=1)
Local i, j
Local mesh=CreateMesh()
Local surf=CreateSurface(mesh)
Dim vertex(m+1,n+1)
For i=0 To m
For j=0 To n
vertex(i, j) = AddVertex(surf, i*dm, 0, j*dn)
Next
Next
For i=0 To m-1
For j=0 To n-1
AddTriangle(surf,vertex(i, j),vertex(i, j+1),vertex(i+1, j))
AddTriangle(surf,vertex(i, j+1),vertex(i+1, j+1),vertex(i+1, j))
Next
Next
UpdateNormals mesh
Return mesh
End Function
|
(Offline)
|
|
26.03.2010, 22:11
|
#3
|
Нуждающийся
Регистрация: 10.09.2006
Сообщений: 77
Написано 3 полезных сообщений (для 3 пользователей)
|
Re: Меш, созданный вручную, проблема с освещением
Graphics3D 800,600,32,2
SetBuffer BackBuffer()
camera=CreateCamera()
PositionEntity camera,0,10,0
TurnEntity camera,90,0,0
Dim vertex(0,0)
m=CreatePlaneMN(2,3,2,1)
; WireFrame 1
light=CreateLight()
PositionEntity light,0,5,0
Repeat
If KeyHit(1) Then Exit
UpdateWorld()
RenderWorld()
Flip
Forever
End
Function CreatePlaneMN(m=1,n=1,dm=1,dn=1)
Local i, j
Local mesh=CreateMesh()
Local surf=CreateSurface(mesh)
Dim vertex(m+1,n+1)
For i=0 To m
For j=0 To n
vertex(i, j) = AddVertex(surf, i*dm, 0, j*dn)
Next
Next
For i=0 To m-1
For j=0 To n-1
AddTriangle(surf,vertex(i, j),vertex(i, j+1),vertex(i+1, j))
AddTriangle(surf,vertex(i, j+1),vertex(i+1, j+1),vertex(i+1, j))
Next
Next
UpdateNormals mesh
Return mesh
End Function
У меня меш остался серым
|
(Offline)
|
|
29.03.2010, 01:52
|
#4
|
Нуждающийся
Регистрация: 10.09.2006
Сообщений: 77
Написано 3 полезных сообщений (для 3 пользователей)
|
Re: Меш, созданный вручную, проблема с освещением
Копался в коде и нашёл вот что. Пример кода.
Graphics3D 1024,768,16,2
SetBuffer BackBuffer()
light_2=CreateLight()
;cube3=CreateCube(light_2)
PositionEntity light_2,0,20,0
cube=CreateCube()
PositionEntity cube,0,20,-10
cube=CreateCube()
PositionEntity cube,0,20,10
cube=CreateCube()
PositionEntity cube,-10,20,0
cube=CreateCube()
PositionEntity cube,10,20,0
pivot=CreatePivot()
camera=CreateCamera(pivot)
Repeat
If (Not KeyDown(29)) And (KeyDown(205)) MoveEntity pivot ,1,0,0
If (Not KeyDown(29)) And (KeyDown(203)) MoveEntity pivot ,-1,0,0
If (Not KeyDown(29)) And (Not KeyDown (56)) And (KeyDown(200)) MoveEntity pivot ,0,0,1
If (Not KeyDown(29)) And (Not KeyDown (56)) And (KeyDown(208)) MoveEntity pivot ,0,0,-1
If KeyDown (56) And KeyDown (200) TurnEntity camera, -0.5,0,0
If KeyDown (56) And KeyDown (208) TurnEntity camera, 0.5,0,0
If KeyDown (29) And KeyDown (200) MoveEntity pivot, 0,1,0
If KeyDown (29) And KeyDown (208) MoveEntity pivot, 0,-1,0
If KeyDown (29) And KeyDown (203) TurnEntity pivot, 0,2,0
If KeyDown (29) And KeyDown (205) TurnEntity pivot, 0,-2,0
If KeyHit(30) MoveEntity light_2,1,0,0
If KeyHit(44) MoveEntity light_2,-1,0,0
UpdateWorld
RenderWorld
Flip
Until KeyHit(1)
End
По бокам от истоника света я создаю 4 кубика. По идее они иметь светлые грани, которые ближе всего к источнику, т.е. "смотрят на него", но светлые грани создаются с одной стороны, как будто источник света расположен где-то впереди кубов, а не в центре.
|
(Offline)
|
|
29.03.2010, 12:42
|
#5
|
Бывалый
Регистрация: 25.12.2007
Адрес: г. Краснодар
Сообщений: 894
Написано 421 полезных сообщений (для 1,079 пользователей)
|
Ответ: Меш, созданный вручную, проблема с освещением
Какого типа источник света, думаю проблема в нем
а еще
light=CreateLight(2)
LightRange light,2
__________________
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:33.
|