|
surface - surface handle x# - x coordinate of the vertex y# - y coordinate of the vertex z# - z coordinate of the vertex u# (optional) - u texture coordinate; 0 (default) v# (optional) - v texture coordinate; 0 (default) w# (optional) - w texture coordinate; 1 (default). Accepted for compatibility but not used by the renderer. |
|
Adds a vertex to a surface and returns the vertex's index number, starting from 0. A vertex is a corner point in 3D space; you need at least three to make a triangle. Keep the returned index numbers - AddTriangle uses them to say which three corners each triangle connects. Indices are per-surface: vertex 0 in one surface has nothing to do with vertex 0 in another. The optional u and v parameters set texture coordinates, which control how a texture stretches over any triangle built from this vertex. The top-left of an image is u 0, v 0; the top-right is 1,0; the bottom-right is 1,1. Values outside 0-1 tile the texture. The same u,v is written to both texture coordinate sets (0 and 1) - use VertexTexCoords to set the two sets differently. A new vertex starts with colour 255,255,255, alpha 1 and a normal of 0,0,0. That zero normal makes lighting look wrong until you either set normals yourself with VertexNormal or call UpdateNormals once the mesh is built. See also: AddTriangle, CreateSurface, VertexCoords, VertexTexCoords, VertexColor, UpdateNormals. |
; AddVertex Example
; -----------------
; AddVertex adds a point to a surface and returns its index number,
; counting from 0. The optional u,v parameters say which part of a
; texture the vertex pins to: 0,0 is the texture's top-left corner,
; 1,1 its bottom-right.
Graphics3D 640,480
SetBuffer BackBuffer()
camera=CreateCamera()
PositionEntity camera,0,0,-4
banner=CreateMesh()
surf=CreateSurface(banner)
; Four vertices make the corners of a banner - the documented command
v0=AddVertex(surf,-2,1,0,0,0) ; top left (u 0, v 0)
v1=AddVertex(surf,2,1,0,1,0) ; top right (u 1, v 0)
v2=AddVertex(surf,2,-1,0,1,1) ; bottom right (u 1, v 1)
v3=AddVertex(surf,-2,-1,0,0,1) ; bottom left (u 0, v 1)
; Two clockwise triangles connect the four corners into a quad
AddTriangle surf,v0,v1,v2
AddTriangle surf,v0,v2,v3
; Texture the banner so we can see the uv mapping at work
tex=LoadTexture("media/b3dlogo.jpg")
EntityTexture banner,tex
; Fullbright (1) + two-sided (16) so it stays visible while spinning
EntityFX banner,17
While Not KeyDown(1)
TurnEntity banner,0,1,0
; Arrow keys move the camera
If KeyDown(200) Then MoveEntity camera,0,0,0.1
If KeyDown(208) Then MoveEntity camera,0,0,-0.1
If KeyDown(203) Then TurnEntity camera,0,1,0
If KeyDown(205) Then TurnEntity camera,0,-1,0
RenderWorld
Text 0,0,"Arrow keys: move camera Esc: exit"
Text 0,20,"AddVertex returned indices "+v0+","+v1+","+v2+","+v3
Text 0,40,"Each vertex pins one texture corner: uv 0,0 = top left"
Flip
Wend
End