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

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

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

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

Ответ
 
Опции темы
Старый 01.10.2010, 15:44   #1
polopok
ПроЭктировщик
 
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений
(для 71 пользователей)
[?] проверка перечения точки и модели в цикле ...

идея такая .
1) есть модель и некая точка в пространстве которая свободно перемещается
2) определяем треугольники, вершины и координаты вершин
3) сравниваем попадает точка в треугольники модели или нет
4) выводим результат
вот пример ,но постоянно выводит что точка попала в треугольник.
что не так я сделал ?

Graphics3D 640,480,16
SetBuffer BackBuffer()
Global x#,y#,z#,  x0#,y0#,z0#,  x1#,y1#,z1#,  x2#,y2#,z2# ,s#,s1#,s2#,s3#,dlt#,in
Global xx1#,yy1#,zz1#,xx2#,yy2#,zz2#,xx0#,yy0#,zz0#
Global Camera = CreateCamera()
Global light=CreateLight() 
 
    
    AmbientLight 255, 255, 255
Global Mesh = CreateSphere( 20)
PositionEntity Mesh, 0, 0, 2
EntityAlpha mesh,0.3
    sp= CreateSphere()
    ScaleEntity sp, 0.1, 0.1, 0.1
    EntityColor sp, 255, 0, 0
 
While Not KeyDown(1)
    
    
    If KeyDown( 203 )=True Then x# = x# -.01*0.5 ;   V     strelka vniz
    If KeyDown( 205 )=True Then x# = x# +.01*0.5 ;     ^    strelka vverh
    If KeyDown( 208 )=True Then y# = y# -.01*0.5 ;     <    strelka vlevo
    If KeyDown( 200 )=True Then y# = y# +.01*0.5 ;      >    strelka vpravo
    If KeyDown( 30  )=True Then z# = z# +.01*0.5 ;  A
    If KeyDown( 44  )=True Then z# = z# -.01*0.5  ; Z 
    
    PositionEntity sp, x#, y#, z#+2
    
    
    in= in_triangle(in)
    
    UpdateWorld
    RenderWorld
    
    Text 0,0,"      " +in 
    Flip
Wend
End
 
 
 
 
 
Function in_triangle(in)
 
    Local SC = CountSurfaces( Mesh)
    Local Vert1=0, C1X#, C1Y#, C1Z#
    Local Vert2=0, C2X#, C2Y#, C2Z#
    Local Vert3=0, C3X#, C3Y#, C3Z#
 
    For CS = 1 To SC
        GS = GetSurface( Mesh, CS )
        For CT =0 To CountTriangles( GS )-1
            Vert1 = TriangleVertex( GS, CT, 0 )
            Vert2 = TriangleVertex( GS, CT, 1 )
            Vert3 = TriangleVertex( GS, CT, 2 )
 
            x0#= VertexX#( GS, Vert1 )
             y0#= VertexY#( GS, Vert1 )
            z0#= VertexZ#( GS, Vert1 )
            
            x1#= VertexX#( GS, Vert2 )
             y1#= VertexY#( GS, Vert2 )
            z1#= VertexZ#( GS, Vert2 )
            
            x2#= VertexX#( GS, Vert3 )
             y2#= VertexY#( GS, Vert3 )
            z2#= VertexZ#( GS, Vert3 )    
 
 s#= (Sqr(((yt1#-yt0#)* (zt2#-zt0#)-(zt1#-zt0#)* (yt2#-yt0#))^2+((zt1#-zt0#)* (xt2#-xt0#)-(xt1#-xt0#)* (zt2#-zt0#))^2+((xt1#-xt0#)* (yt2#-yt0#)-(yt1#-yt0#)* (xt2#-xt0#))^2))/2
 
s1#= (Sqr(((yt1#-yt0#)* (zt#-zt0#)-(z1t#-zt0#)* (yt#-yt0#))^2+((zt1#-zt0#)* (xt#-xt0#)-(xt1#-xt0#)* (zt#-zt0#))^2+((xt1#-xt0#)* (yt#-yt0#)-(yt1#-yt0#)* (xt#-xt0#))^2))/2
 
s2#= (Sqr(((yt#-yt0#)* (zt2#-zt0#)-(zt#-zt0#)* (yt2#-yt0#))^2+((zt#-zt0#)* (xt2#-xt0#)-(xt1#-xt0#)* (zt2#-zt0#))^2+((xt#-xt0#)* (yt2#-yt0#)-(yt#-yt0#)* (xt2#-xt0#))^2))/2
 
s3#= (Sqr(((yt1#-yt#)* (zt2#-zt#)-(zt1#-zt#)* (yt2#-yt#))^2+((z1t#-zt#)* (xt2#-xt#)-(xt1#-xt#)* (zt2#-zt#))^2+((xt1#-xt#)* (yt2#-yt#)-(yt1#-yt#)* (x2#-x#))^2))/2
 
  dlt#=s#*0.0001
 
If Abs(s# -(s1# +s2# +s3)) <dlt# Then Return in= 1  Else Return in= 0 
    Next
    Next
End Function
(Offline)
 
Ответить с цитированием
Старый 02.10.2010, 15:17   #2
Reks888
Дэвелопер
 
Аватар для Reks888
 
Регистрация: 04.11.2009
Адрес: Украина, Днепропетровск
Сообщений: 1,480
Написано 662 полезных сообщений
(для 1,985 пользователей)
Ответ: [?] проверка перечения точки и модели в цикле ...

Сообщение от polopok Посмотреть сообщение
и что ? где же ? ответы?
Этим постом ты нарушаешь одно из правил задачи вопросов:
x.y: Не делайте вид что вам кто-то что-то должен
Вскоре, вероятно, начнется срач, а тема отправится в биореактор
По теме: создавай пивот в нужной точке и проверяй с помощью MeshesIntersect
__________________
>type C:\MyProj\*
www.sypiac.weebly.com
>
(Offline)
 
Ответить с цитированием
Старый 02.10.2010, 15:34   #3
Brain
AnyKey`щик
 
Аватар для Brain
 
Регистрация: 11.04.2009
Сообщений: 11
Написано 2 полезных сообщений
(для 2 пользователей)
Ответ: [?] проверка перечения точки и модели в цикле ...

Согласен, а по сабжу:

Ошибка в определении переменных:

			s#= (Sqr(((yt1#-yt0#)* (zt2#-zt0#)-(zt1#-zt0#)* (yt2#-yt0#))^2+((zt1#-zt0#)* (xt2#-xt0#)-(xt1#-xt0#)* (zt2#-zt0#))^2+((xt1#-xt0#)* (yt2#-yt0#)-(yt1#-yt0#)* (xt2#-xt0#))^2))/2
			
			s1#= (Sqr(((yt1#-yt0#)* (zt#-zt0#)-(z1t#-zt0#)* (yt#-yt0#))^2+((zt1#-zt0#)* (xt#-xt0#)-(xt1#-xt0#)* (zt#-zt0#))^2+((xt1#-xt0#)* (yt#-yt0#)-(yt1#-yt0#)* (xt#-xt0#))^2))/2
			
			s2#= (Sqr(((yt#-yt0#)* (zt2#-zt0#)-(zt#-zt0#)* (yt2#-yt0#))^2+((zt#-zt0#)* (xt2#-xt0#)-(xt1#-xt0#)* (zt2#-zt0#))^2+((xt#-xt0#)* (yt2#-yt0#)-(yt#-yt0#)* (xt2#-xt0#))^2))/2
			
			s3#= (Sqr(((yt1#-yt#)* (zt2#-zt#)-(zt1#-zt#)* (yt2#-yt#))^2+((z1t#-zt#)* (xt2#-xt#)-(xt1#-xt#)* (zt2#-zt#))^2+((xt1#-xt#)* (yt2#-yt#)-(yt1#-yt#)* (x2#-x#))^2))/2
Переменные yt1#,yt0#,zt2#,zt0#,zt1# и тд не определены

Вообще советую пользоваться IDE с подсветкой синтаксиса, тогда таких глупых ошибок не будет
Миниатюры
Нажмите на изображение для увеличения
Название: ideal.JPG
Просмотров: 758
Размер:	41.6 Кб
ID:	11437  
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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