Тема: Xors3D
Показать сообщение отдельно
Старый 27.06.2022, 15:38   #720
antarman
AnyKey`щик
 
Регистрация: 08.08.2006
Сообщений: 3
Написано 0 полезных сообщений
(для 0 пользователей)
Re: Xors3D

Include "Xors3d.bb"

Const PI_180 = (0.0174532925199433)
Const WaterMapSize = 512

; setup maximum supported AntiAlias Type
xSetAntiAliasType(xGetMaxAntiAlias())
; set application window caption
xAppTitle("Simple Water")
; initialize Graphics mode
xGraphics3D(800, 600, 0, False, True)
xSetBuffer(xBackBuffer())
xHidePointer()
xAntiAlias(True)
; create camera
camera = xCreateCamera()
xPositionEntity(camera, 0, 10, -10)
xCameraFogMode camera,1
xCameraFogColor camera,100,200,255
xCameraZoom camera,.25
; cube fx camera
FXCamera=xCreateCamera()
xCameraClsMode FXCamera,False,True
xCameraProjMode FXCamera,0
xCameraViewport FXCamera,0,0,WaterMapSize,WaterMapSize
xCameraZoom FXCamera,.0125
; ambient light
xAmbientLight 32,32,32
; light
mainlight=xCreateLight()
xRotateEntity mainlight,45,60,30
xLightColor mainlight,192,192,192
; create level
level = xLoadAnimMesh("level\test.b3d")
water= xLoadMesh("level\water.3ds")
xMoveEntity water,0,-2,0
WaterMapTexture=xCreateTexture(WaterMapSize,WaterMapSize,128+48)
xEntityTexture water,WaterMapTexture
xEntityColor water,100,200,255
xEntityColor water,512,512,512
xEntityAlpha water,0.7
xEntityFX water,1

; For mouse look
xMoveMouse(xGraphicsWidth() / 2, xGraphicsHeight() / 2)
mousespeed# = 0.5
camerasmoothness# = 4.5
camxa#=180

Const C_level=1,C_player=2,C_floorpivot=3

xCollisions c_player,c_level,2,2
xEntityType camera,c_player
xEntityType level,c_level,1
xEntityRadius camera,4.5,6


; main program loop
While xKeyDown(KEY_ESCAPE)=0
	; camera control
	If xKeyDown(KEY_W) Then : xMoveEntity(camera, 0, 0, 1): EndIf
	If xKeyDown(KEY_S) Then : xMoveEntity(camera, 0, 0, -1): EndIf
	If xKeyDown(KEY_A) Then : xMoveEntity(camera, -1, 0, 0): EndIf
	If xKeyDown(KEY_D) Then : xMoveEntity(camera, 1, 0, 0): EndIf
	mxs# = CurveValue(xMouseXSpeed() * mousespeed, mxs, camerasmoothness)
	mys# = CurveValue(xMouseYSpeed() * mousespeed, mys, camerasmoothness)
	camxa# = camxa - mxs
	camya# = camya + mys
	If camya < -89 Then : camya = -89 : EndIf
	If camya > 89 Then : camya = 89 : EndIf
	xMoveMouse(xGraphicsWidth()/2, xGraphicsHeight()/2)
	xRotateEntity(camera, camya, camxa, 0.0)

	If xEntityY(camera,1)<-3 Then : underwater=1 : Else : underwater=0 : EndIf
	wdb=1-wdb
	xCameraProjMode camera,0
	xCameraProjMode FXCamera,1
	xHideEntity(water)
	If underwater=0	Then
		xPositionEntity FXCamera,xEntityX(camera),xEntityY(water)-2,xEntityZ(camera)
		If wdb Then
			;do Left view
			xSetCubeFace WaterMapTexture,0
			xRotateEntity FXCamera,0,90,0
			xRenderWorld
			xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
			;do forward view
			xSetCubeFace WaterMapTexture,1
			xRotateEntity FXCamera,0,0,0
			xRenderWorld
			xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
		Else
			;do Right view
			xSetCubeFace WaterMapTexture,2
			xRotateEntity FXCamera,0,-90,0
			xRenderWorld
			xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
			;do backward view
			xSetCubeFace WaterMapTexture,3
			xRotateEntity FXCamera,0,180,0
			xRenderWorld
			xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
		EndIf
		;do up view
		xSetCubeFace WaterMapTexture,4
		xRotateEntity FXCamera,-90,0,0
		xRenderWorld
		xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
	Else
		xPositionEntity FXCamera,-xEntityX(camera),xEntityY(camera)-2,xEntityZ(camera)
		If wdb Then
			;do Left view
			xSetCubeFace WaterMapTexture,0
			xRotateEntity FXCamera,0,-90,180
			xRenderWorld
			xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
			;do forward view
			xSetCubeFace WaterMapTexture,1
			xRotateEntity FXCamera,0,0,180
			xRenderWorld
			xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
		Else
			;do Right view
			xSetCubeFace WaterMapTexture,2
			xRotateEntity FXCamera,0,90,180
			xRenderWorld
			xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
			;do backward view
			xSetCubeFace WaterMapTexture,3
			xRotateEntity FXCamera,0,180,180
			xRenderWorld
			xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
		EndIf
		;do down view
		xSetCubeFace WaterMapTexture,5
		xRotateEntity FXCamera,-90,0,180
		xRenderWorld
		xCopyRect 0,0,WaterMapSize,WaterMapSize,0,0,xBackBuffer(),xTextureBuffer(WaterMapTexture)
	EndIf
	xShowEntity(water)
	xCameraProjMode FXCamera,0
	xCameraProjMode camera,1
	xSetBuffer(xBackBuffer())
	xUpdateNormals water
	If underwater Then
		If waterdirection=1 Then
			xFlipMesh water
			xEntityAlpha water,1
			xEntityColor water,155,200,255
		EndIf
		waterdirection=-1
		xCameraFogColor camera,50,100,155
		t#=xMillisecs()/6
		xScaleEntity camera,1+Cos(t)*0.04,1+Sin(t)*0.04,1+Cos(t)*0.02
		xCameraFogRange camera,0,200+Sin(xMillisecs()*0.05)*60
		xTurnEntity camera,0,0,Sin(t)*2
	Else
		If waterdirection=-1 Then
			xFlipMesh water
			xEntityAlpha water,.7
			xEntityColor water,255,255,255
		EndIf
		waterdirection=1

		xCameraFogColor camera,100,200,255
		xScaleEntity camera,1,1,1
		xCameraFogRange camera,100,1000
	EndIf
	s=xGetSurface(water,0)
	For i =0 To xCountVertices(s)-1
		Freq#=xMillisecs()/4
		vx# = xVertexX(s,i)
		vy# = xVertexY(s,i)
		vz# = xVertexZ(s,i)
		vy#=Sin(freq+vx*500+vz*300)*1.2
		xVertexCoords s,i,vx,-vy,vz
	Next
	xUpdateWorld()
	; render scene
	xRenderWorld()
	; switch back buffer
	xFlip()
Wend

; For camera mouse look
Function CurveValue#(newvalue#, oldvalue#, increments%)
	If increments > 1 Then : oldvalue = oldvalue - (oldvalue - newvalue) / increments : EndIf
	If increments <= 1 Then : oldvalue = newvalue : EndIf
	Return oldvalue
End Function
все остальное из cubewater для Blitz3D
(Offline)
 
Ответить с цитированием