попиксельное вычисление пересечения точки с mesh(3d)
|
|
polopok | Дата: Среда, 21 Апреля 2010, 20:13 | Сообщение # 1 |
Начинающий
Группа: Пользователи
Сообщений: 13
Награды: 0
Замечания: 0%
Статус: ![](/on.gif)
| задача вычислить координаты пересечения с 3d объектом попиксельно то есть как бы просканировать mesh наподобие оператора getpixsel пожалуйста приведите пример вот мой пример для 2d Code Graphics 1200,800 SetBuffer BackBuffer() x= 20 d= 0 s=28 y= 20 i=0 f=30 n=-1 dddPlayer=LoadImage("C:\Users\bonivur\Pictures\blitz\cccc.jpg") gfxPlayer=LoadImage("C:\Users\bonivur\Pictures\blitz\c cc"+i+".jpg") Die=LoadSound("C:\Users\bonivur\Pictures\blitz\beep.wav")
While Not KeyHit(1) gfxPlayer=LoadImage("C:\Users\bonivur\Pictures\blitz\ccc"+i+".jpg") ;.gow Cls DrawImage gfxPlayer,2, f
Delay 50 ;GetColor x,y GetColor d,s If KeyDown(200) Then y = y-1 If KeyDown(208) Then y = y+1 If KeyDown(203) Then x = x-1 If KeyDown(205) Then x = x+1 If KeyHit(57) Then muz() re= ColorRed() gr= ColorGreen() bl= ColorBlue() r= re+gr+bl
r = ColorRed()+ColorGreen() +ColorBlue() If r =765 Then SoundPan die,n PlaySound die End If d= d+1 If d =20 Then d=0 s=s+1 End If If s=32 Then s=28 d=0 FreeImage gfxPlayer i=i+1 Delay 2000 End If If i=3 Then i=0 ;End End If Color 255,255,255 Text 1,1,"Box at "+d+","+s+" B RGB:" + re + "," + gr + "," + bl+ "!"+r+"" DrawImage dddPlayer,d,s Flip
Wend
Function muz() If n=1 Then n=-1 If n=-1 Then n=1 End Function
|
|
| |
Optimus | Дата: Четверг, 22 Апреля 2010, 08:47 | Сообщение # 2 |
![Optimus](http://igrostroenie.my1.ru/avatar/08/311469.png) Крутой
Группа: Участники
Сообщений: 646
Награды: 0
Замечания: 0%
Статус: ![](/on.gif)
Профессия: Программист
Команда: Solomanders te@m
Проектов: TripleWar(разработка)
| [offtop]огого.................чтото новенькое. У меня даже в понимании такого не было. Но зачем тебе это? ах и кстати, зачем тебе эта функция? Code Function muz() If n=1 Then n=-1 If n=-1 Then n=1 End Function [/offtop]
Internet Explorer-замечательный браузер для того чтобы зайти и скачать Firefox
|
|
| |
polopok | Дата: Четверг, 22 Апреля 2010, 09:27 | Сообщение # 3 |
Начинающий
Группа: Пользователи
Сообщений: 13
Награды: 0
Замечания: 0%
Статус: ![](/on.gif)
| Code Function muz() If n=1 Then n=-1 If n=-1 Then n=1 End Function да это остаток прошлого кода просто лень код почистить. а по вопросу есть какой пример?
|
|
| |
polopok | Дата: Четверг, 22 Апреля 2010, 22:49 | Сообщение # 4 |
Начинающий
Группа: Пользователи
Сообщений: 13
Награды: 0
Замечания: 0%
Статус: ![](/on.gif)
| все таки интересно товарищи рассуждающие и практикующие .... неужто никто не откликнется по данной теме???
|
|
| |
polopok | Дата: Пятница, 23 Апреля 2010, 17:56 | Сообщение # 5 |
Начинающий
Группа: Пользователи
Сообщений: 13
Награды: 0
Замечания: 0%
Статус: ![](/on.gif)
| 1. загружается mesh допустим шар. 2. создается "контейнер" (box,квадрат,прямоугольник) 3. mesh(шар) помещается внутри "контейнера" 4. изменяется размер mesh-а(шара) в соответствии с размерами "контейнера" 5. по осям X,Y с шагом в 0.1 проверяется область "контейнера" как бы сканируя точка за точкой стоку за строкой , при завершении смещается по оси Z на 0.1 . продолжается процесс сканирования на всю глубину(Z) "контейнера" 6. в ходе сканирования пространства внутри "контейнера" определить "точка" сканирования находится внутри mesh-а(шара) или снаружи 7. если "точка" сканирования находится внутри ,то издать звук №1 ,иначе звук №2 и так по каждой "точке" пространства "контейнера" Я очень расчитываю на вашу помощь , помощь настоящих ПРОФЕССИОНАЛОВ ,СПЕЦИАЛИСТОВ В СВОЕМ ДЕЛЕ. хорошо бы пример. С УВАЖЕНИЕМ POLOPOK
|
|
| |
polopok | Дата: Суббота, 24 Апреля 2010, 16:46 | Сообщение # 6 |
Начинающий
Группа: Пользователи
Сообщений: 13
Награды: 0
Замечания: 0%
Статус: ![](/on.gif)
| вот пример ,но при перемещении по оси z не всегда определяется объект (шар полупрозрачный) Code Graphics3D 640,480 SetBuffer BackBuffer() z#=2 x#=0.1 y#=0 camera=CreateCamera() s=0 light=CreateLight() RotateEntity light,90,0,0 t#=0.01 ; Create cube cube=CreateSphere() ;cube=CreateCube() ;cube=LoadMesh("C:/Users/bonivur/1qq.3ds") Sphere=CreateSphere() EntityAlpha cube,0.2
ScaleEntity Sphere,0.01,0.01,0.01 EntityPickMode cube,2 NameEntity cube,"cube" PositionEntity cube,0,0,5
en=0 ;While en=0 While Not KeyDown( 1 ) If KeyHit(200)=True Then z#=z#+0.01;208 If KeyHit(208)=True Then z#=z# - 0.01;200 If KeyHit(205)=True Then x#=x#+0.01; 203 If KeyHit(203)=True Then x#=x# - 0.01;205
LinePick x#,0,z#,x#,0,z#-0.01 PositionEntity Sphere,X#,0,Z# en=PickedEntity() If en If EntityName(en)="cube" ; проверка Else en=0 EndIf EndIf If MeshesIntersect(Sphere,cube)=True s=1 Else s=0 EndIf ;If c#= EntityZ(cube) Then s=1
;Wend
RenderWorld Text 0,0," x# "+x#+" z# "+z#+" en "+en+" Picked Z- "+PickedZ()+" Picked Y- "+PickedY()+" Picked X- "+PickedX() Text 0,10," x# "+x#+" z# "+z#+" en "+en+" Entity Z- "+EntityZ(Sphere)+" Entity Y- "+EntityY(Sphere)+" Entity X- "+EntityX(Sphere) Text 0,30," en --"+en+ " s-- "+s;+EntityZ(Sphere) Flip Wend
End меня интересует как исправить данную проблемму?
|
|
| |
polopok | Дата: Воскресенье, 25 Апреля 2010, 15:42 | Сообщение # 7 |
Начинающий
Группа: Пользователи
Сообщений: 13
Награды: 0
Замечания: 0%
Статус: ![](/on.gif)
| какая жалость что нет обсуждения
|
|
| |
Draw | Дата: Суббота, 08 Мая 2010, 17:19 | Сообщение # 8 |
![Draw](http://www.igrostroenie.ru/avatar/72/719085.jpg) Продвинутый
Группа: Участники
Сообщений: 194
Награды: 0
Замечания: 0%
Статус: ![](/on.gif)
Команда: DeforShys
Проектов: 8 (2 активных 6 инактив)
| Quote (polopok) Function muz() If n=1 Then n=-1 If n=-1 Then n=1 End Function а не проще было написать n=-n? -- я не совсем понял что ты хочешь. По твоему объяснению я понял что ты хочешь на экране сканировать 3д меш; вот так я понял твой настрой: 1. Пик камеры в область пространства с циклом for от 0 до конца по осям x и y экрана 2. условие принадлежит ли точка "сканирования" мешу - да звук какой то - нет звук другой но причем тут ось z? 2 вариант моего понимания: 1. условная точка (иначе как pivot) ставится в центр меша 2. циклом for двигается по оси Z 2.1 циклом for двигается по оси X (внутри цикла с Z) 2.2 циклом for двигается по оси Y (внутри цикла с X и Z) 3. если находится в меше то издать какой то звук иначе другой
ICQ 557709132 пиши. Отвечу на любой вопрос по блицу
|
|
| |
polopok | Дата: Суббота, 03 Июля 2010, 16:48 | Сообщение # 9 |
Начинающий
Группа: Пользователи
Сообщений: 13
Награды: 0
Замечания: 0%
Статус: ![](/on.gif)
| 2 вариант моего понимания: 1. условная точка (иначе как pivot) ставится в центр меша 2. циклом for двигается по оси Z 2.1 циклом for двигается по оси X (внутри цикла с Z) 2.2 циклом for двигается по оси Y (внутри цикла с X и Z) 3. если находится в меше то издать какой то звук иначе другой да я сделал такой вариант ,но это слишком долго ведь проверить надо весь объём меша!
|
|
| |