Показать сообщение отдельно
Старый 05.07.2011, 22:42   #148
dsd
Мастер
 
Аватар для dsd
 
Регистрация: 13.06.2011
Сообщений: 1,103
Написано 481 полезных сообщений
(для 1,836 пользователей)
Ответ: Имитация водной поверхности.

Include "xors3d.bb" 
Global pivot,camera,mxs#,mys#,Light,ball,camera1

Dim ScreenData#(5,3)

xGraphics3D(800,600, 32,0, 0)

pivot=xCreatePivot()
camera1 = xCreateCamera(pivot)
camera=xCreateCamera(camera1)
xRotateEntity camera,90,0,0
xCameraProjMode camera,0
light = xCreateLight()


;debufcam=xCreateCamera(camera)
;xPositionEntity debufcam,0,0,50
;xCameraViewport debufcam,0,0,300,300
;xPointEntity debufcam,camera
debufcam2=xCreateCamera(camera1)
xPositionEntity debufcam2,0,50,0
xCameraViewport debufcam2,200,0,200,200
xPointEntity debufcam2,camera1

lefttop=xCreateCube()
xEntityColor lefttop,255,0,0
leftdown=xCopyEntity(lefttop)
righttop=xCopyEntity(lefttop)
rightdown=xCopyEntity(lefttop)
center=xCopyEntity(lefttop)


For i=0 To 50
gg=xCreateCube()
xPositionEntity gg,Rnd(0,50),0,Rnd(0,50)
Next

While(Not (xKeyHit(KEY_ESCAPE) Or xWinMessage("WM_CLOSE")))
MindMassage()

xPositionEntity leftdown,ScreenData#(0,0),ScreenData#(0,1),ScreenData#(0,2)
xPositionEntity lefttop,ScreenData#(1,0),ScreenData#(1,1),ScreenData#(1,2)
xPositionEntity righttop,ScreenData#(2,0),ScreenData#(2,1),ScreenData#(2,2)
xPositionEntity rightdown,ScreenData#(3,0),ScreenData#(3,1),ScreenData#(3,2)
xPositionEntity center,ScreenData#(4,0),ScreenData#(4,1),ScreenData#(4,2)

xUpdateWorld
xRenderWorld()
Control(0.1,1)
xText 10,50,ScreenData#(0,0)
xText 10,60,ScreenData#(0,1)
xText 10,70,ScreenData#(0,2)

xText 80,50,ScreenData#(1,0)
xText 80,60,ScreenData#(1,1)
xText 80,70,ScreenData#(1,2)

xText 160,50,ScreenData#(2,0)
xText 160,60,ScreenData#(2,1)
xText 160,70,ScreenData#(2,2)

xText 240,50,ScreenData#(3,0)
xText 240,60,ScreenData#(3,1)
xText 240,70,ScreenData#(3,2)

xText 320,50,ScreenData#(4,0)
xText 320,60,ScreenData#(4,1)
xText 320,70,ScreenData#(4,2)

        xFlip() 
Wend

End


Function MindMassage()

xTFormVector 0,1,0,0,camera
a#=xTFormedX()
b#=xTFormedY()
c#=xTFormedZ()

xTFormPoint 0,0,0,0,camera
x1#=xTFormedX()
y1#=xTFormedY()
z1#=xTFormedZ()

d#=xEntityY(camera,1)

; ax+by+cz+d=0
;ищи левый нижний угол
;пересечение X=-z и Y=-2z
;подставляю в первое уравнение
;
Z00#=-D/(c-a-2*b)
X00#=-z00
Y00#=-2*z00
xTFormPoint x00,y00,z00,camera,0
ScreenData#(0,0)=xTFormedX()
ScreenData#(0,1)=xTFormedY()
ScreenData#(0,2)=xTFormedZ()

; ax+by+cz+d=0
;ищи левый верхний угол
;пересечение X=-z и Y=2z
;подставляю в первое уравнение
;
Z01#=-D/(c-a+2*b)
X01#=-z01
Y01#=2*z01
xTFormPoint x01,y01,z01,camera,0
ScreenData#(1,0)=xTFormedX()
ScreenData#(1,1)=xTFormedY()
ScreenData#(1,2)=xTFormedZ()

; ax+by+cz+d=0
;ищи правый верхний угол
;пересечение X=z и Y=2z
;подставляю в первое уравнение
;
Z11#=-D/(c+a+2*b)
X11#=z11
Y11#=2*z11
xTFormPoint x11,y11,z11,camera,0
ScreenData#(2,0)=xTFormedX()
ScreenData#(2,1)=xTFormedY()
ScreenData#(2,2)=xTFormedZ()

; ax+by+cz+d=0
;ищи правый нижний угол
;пересечение X=z и Y=-2z
;подставляю в первое уравнение
;
Z10#=-D/(c+a-2*b)
X10#=z10
Y10#=-2*z10
xTFormPoint x10,y10,z10,camera,0
ScreenData#(3,0)=xTFormedX()
ScreenData#(3,1)=xTFormedY()
ScreenData#(3,2)=xTFormedZ()

;ищи центр
xTFormPoint (x01+x10+x11+x00)/4,(y01+y10+y11+y00)/4,(z01+z10+z11+z00)/4,camera,0
ScreenData#(4,0)=xTFormedX()
ScreenData#(4,1)=xTFormedY()
ScreenData#(4,2)=xTFormedZ()

End Function 

Function control(speed#,mousesensitivity#)
If xKeyDown(key_1) Then xWireframe(True) Else xWireframe(False)
        xText(10, 10, "FPS: " + xGetFPS()) 	
 		xText(10,30,"Trisinview: "+xTrisRendered ())
mxs#=mxs#+(xMouseXSpeed()/5.0)
mys#=mys#+(xMouseYSpeed()/5.0)
xRotateEntity (camera1,mousesensitivity#*mys#,-mousesensitivity#*mxs#,0)
xMoveMouse xGraphicsWidth()/2,xGraphicsHeight()/2
If xKeyDown(17) Or xKeyDown(200) xMoveEntity camera1,0,0,speed#
If xKeyDown(31) Or xKeyDown(208) xMoveEntity camera1,0,0,-speed#
If xKeyDown(30) Or xKeyDown(203) xMoveEntity camera1,-speed#,0,0
If xKeyDown(32) Or xKeyDown(205) xMoveEntity camera1,speed#,0,0
xPositionEntity pivot,xEntityX#(camera1,1),xEntityY#(camera1,1),xEntityZ#(camera1,1)
xPositionEntity camera1,0,0,0
End Function
Люди, реально, какие углы у камеры? Кто-нибудь знает или нет?
(Offline)
 
Ответить с цитированием