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

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

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

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

Ответ
 
Опции темы
Старый 26.03.2010, 07:13   #1
voron
Нуждающийся
 
Регистрация: 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
H@NON
Дэвелопер
 
Регистрация: 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
voron
Нуждающийся
 
Регистрация: 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
voron
Нуждающийся
 
Регистрация: 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_2=CreateLight()
Какого типа источник света, думаю проблема в нем

а еще

light=CreateLight(2)
LightRange light,2
__________________
http://forum.boolean.name/image.php?type=sigpic&userid=2247&dateline=1418298  527
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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