void DrawFastSphere( CMeshBuilder &meshBuilder, const Vector ¢er, float radius, int r, int g, int b ) { int i; int offset = meshBuilder.GetCurrentVertex(); Vector pos; for (i = 0; i < 51; i++) { pos.x = g_FastSpherePosData[i][0] + center.x + g_FastSpherePosData[i][5] * radius; pos.y = g_FastSpherePosData[i][1] + center.y + g_FastSpherePosData[i][6] * radius; pos.z = g_FastSpherePosData[i][2] + center.z + g_FastSpherePosData[i][7] * radius; meshBuilder.Position3fv( pos.Base() ); meshBuilder.Normal3fv( &g_FastSpherePosData[i][5] ); meshBuilder.TexCoord2fv( 0, &g_FastSpherePosData[i][3] ); meshBuilder.Color3ub( 255, 255, 255 ); meshBuilder.AdvanceVertex(); } for (i = 0; i < 84; i++) { meshBuilder.FastIndex( g_FastSphereTriData[i][0] + offset ); meshBuilder.FastIndex( g_FastSphereTriData[i][1] + offset ); meshBuilder.FastIndex( g_FastSphereTriData[i][2] + offset ); } }
int C_TestTraceline::DrawModel( int flags ) { trace_t tr; Vector forward, right, up, endpos, hitpos; AngleVectors (GetAbsAngles(), &forward, &right, &up); endpos = GetAbsOrigin() + forward * MAX_TRACE_LENGTH; UTIL_TraceLine( GetAbsOrigin(), endpos, MASK_SOLID_BRUSHONLY, NULL, COLLISION_GROUP_NONE, &tr ); CMatRenderContextPtr pRenderContext( materials ); IMesh* pMesh = pRenderContext->GetDynamicMesh( true, NULL, NULL, m_pWireframe ); CMeshBuilder meshBuilder; meshBuilder.Begin( pMesh, MATERIAL_LINES, 1 ); meshBuilder.Position3fv( GetAbsOrigin().Base() ); meshBuilder.Color3ub( 255, 255, 255 ); meshBuilder.AdvanceVertex(); meshBuilder.Position3fv( tr.endpos.Base() ); meshBuilder.Color3ub( 255, 255, 255 ); meshBuilder.AdvanceVertex(); meshBuilder.End(); pMesh->Draw(); // Didn't hit anything if ( tr.fraction != 1.0 ) { unsigned char color[] = { 0, 255, 0 }; DrawCube( tr.endpos, color ); } if ( (!tr.allsolid) && (tr.fractionleftsolid != 0.0) ) { unsigned char color[] = { 255, 0, 0 }; DrawCube( tr.startpos, color ); } return 1; }
//----------------------------------------------------------------------------- // Purpose: Renders a selection gizmo at our bounds center. // Input : pRender - Rendering interface. //----------------------------------------------------------------------------- void Marker3D::RenderTool3D(CRender3D *pRender) { if (!IsActiveTool()) { return; } Vector *pPos; if (IsTranslating()) { pPos = &m_vecTranslatePos; } else { if (IsEmpty()) { return; } pPos = &m_vecPos; } // // Setup the renderer. // pRender->SetRenderMode(RENDER_MODE_WIREFRAME); CMeshBuilder meshBuilder; IMesh* pMesh = MaterialSystemInterface()->GetDynamicMesh(); meshBuilder.Begin(pMesh, MATERIAL_LINES, 3); meshBuilder.Position3f(g_MIN_MAP_COORD, (*pPos)[1], (*pPos)[2]); meshBuilder.Color3ub(255, 0, 0); meshBuilder.AdvanceVertex(); meshBuilder.Position3f(g_MAX_MAP_COORD, (*pPos)[1], (*pPos)[2]); meshBuilder.Color3ub(255, 0, 0); meshBuilder.AdvanceVertex(); meshBuilder.Position3f((*pPos)[0], g_MIN_MAP_COORD, (*pPos)[2]); meshBuilder.Color3ub(0, 255, 0); meshBuilder.AdvanceVertex(); meshBuilder.Position3f((*pPos)[0], g_MAX_MAP_COORD, (*pPos)[2]); meshBuilder.Color3ub(0, 255, 0); meshBuilder.AdvanceVertex(); meshBuilder.Position3f((*pPos)[0], (*pPos)[1], g_MIN_MAP_COORD); meshBuilder.Color3ub(0, 0, 255); meshBuilder.AdvanceVertex(); meshBuilder.Position3f((*pPos)[0], (*pPos)[1], g_MAX_MAP_COORD); meshBuilder.Color3ub(0, 0, 255); meshBuilder.AdvanceVertex(); meshBuilder.End(); pMesh->Draw(); pRender->SetRenderMode(RENDER_MODE_DEFAULT); }
static void DispInfo_DrawChainNormals( IDispInfo *pHead ) { #ifndef SWDS #ifdef _DEBUG // Only do it in debug because we're only storing the info then Vector p; materialSystemInterface->Bind( g_pMaterialWireframeVertexColor ); for( IDispInfo *pCur=pHead; pCur; pCur = pCur->GetNextInRenderChain() ) { CDispInfo *pDisp = static_cast<CDispInfo*>( pCur ); int nVerts = pDisp->NumVerts(); IMesh *pMesh = materialSystemInterface->GetDynamicMesh( ); CMeshBuilder meshBuilder; meshBuilder.Begin( pMesh, MATERIAL_LINES, nVerts * 3 ); for( int iVert=0; iVert < nVerts; iVert++ ) { CDispRenderVert* pVert = pDisp->GetVertex(iVert); meshBuilder.Position3fv( pVert->m_vPos.Base() ); meshBuilder.Color3ub( 255, 0, 0 ); meshBuilder.AdvanceVertex(); VectorMA( pVert->m_vPos, 5.0f, pVert->m_vNormal, p ); meshBuilder.Position3fv( p.Base() ); meshBuilder.Color3ub( 255, 0, 0 ); meshBuilder.AdvanceVertex(); meshBuilder.Position3fv( pVert->m_vPos.Base() ); meshBuilder.Color3ub( 0, 255, 0 ); meshBuilder.AdvanceVertex(); VectorMA( pVert->m_vPos, 5.0f, pVert->m_vSVector, p ); meshBuilder.Position3fv( p.Base() ); meshBuilder.Color3ub( 0, 255, 0 ); meshBuilder.AdvanceVertex(); meshBuilder.Position3fv( pVert->m_vPos.Base() ); meshBuilder.Color3ub( 0, 0, 255 ); meshBuilder.AdvanceVertex(); VectorMA( pVert->m_vPos, 5.0f, pVert->m_vTVector, p ); meshBuilder.Position3fv( p.Base() ); meshBuilder.Color3ub( 0, 0, 255 ); meshBuilder.AdvanceVertex(); } meshBuilder.End(); pMesh->Draw(); } #endif #endif }
static void OverlayColorRamp( bool bHalfSpace ) { IMaterial *pMaterial; float x, y, w, h; pMaterial = materials->FindMaterial( "vgui/white", TEXTURE_GROUP_OTHER, true ); int backBufferWidth, backBufferHeight; materials->GetBackBufferDimensions( backBufferWidth, backBufferHeight ); w = ( backBufferWidth == 1280 ) ? 1024 : 512; h = 80; x = ( backBufferWidth - w )/2; y = ( backBufferHeight - 4*h )/2; int numBands = 32; int color0 = 0; int color1 = bHalfSpace ? 127 : 255; int colorStep = (color1 - color0 + 1)/numBands; CMatRenderContextPtr pRenderContext( materials ); pRenderContext->Bind( pMaterial ); IMesh* pMesh = pRenderContext->GetDynamicMesh( true ); CMeshBuilder meshBuilder; // draw ticks int xx = x; meshBuilder.Begin( pMesh, MATERIAL_LINES, numBands+1 ); for ( int i=0; i<numBands+1; i++ ) { meshBuilder.Position3f( xx, y-10, 0.0f ); meshBuilder.TexCoord2f( 0, 0.0f, 0.0f ); meshBuilder.Color3ub( 255, 255, 0 ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx, y, 0.0f ); meshBuilder.TexCoord2f( 0, 0.0f, 0.0f ); meshBuilder.Color3ub( 255, 255, 0 ); meshBuilder.AdvanceVertex(); xx += w/numBands; } meshBuilder.End(); pMesh->Draw(); // black to white band xx = x; int color = color0; meshBuilder.Begin( pMesh, MATERIAL_QUADS, numBands ); for ( int i=0; i<numBands+1; i++ ) { meshBuilder.Position3f( xx, y, 0.0f ); meshBuilder.TexCoord2f( 0, 0.0f, 0.0f ); meshBuilder.Color3ub( color, color, color ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx+w/numBands, y, 0.0f ); meshBuilder.TexCoord2f( 0, 1.0f, 0.0f ); meshBuilder.Color3ub( color, color, color ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx+w/numBands, y+h, 0.0f ); meshBuilder.TexCoord2f( 0, 1.0f, 1.0f ); meshBuilder.Color3ub( color, color, color ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx, y+h, 0.0f ); meshBuilder.TexCoord2f( 0, 0.0f, 1.0f ); meshBuilder.Color3ub( color, color, color ); meshBuilder.AdvanceVertex(); color += colorStep; if ( color > 255 ) color = 255; xx += w/numBands; } meshBuilder.End(); pMesh->Draw(); // white to black band color = color1; y += h; xx = x; meshBuilder.Begin( pMesh, MATERIAL_QUADS, numBands ); for ( int i=0; i<numBands+1; i++ ) { meshBuilder.Position3f( xx, y, 0.0f ); meshBuilder.TexCoord2f( 0, 0.0f, 0.0f ); meshBuilder.Color3ub( color, color, color ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx+w/numBands, y, 0.0f ); meshBuilder.TexCoord2f( 0, 1.0f, 0.0f ); meshBuilder.Color3ub( color, color, color ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx+w/numBands, y+h, 0.0f ); meshBuilder.TexCoord2f( 0, 1.0f, 1.0f ); meshBuilder.Color3ub( color, color, color ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx, y+h, 0.0f ); meshBuilder.TexCoord2f( 0, 0.0f, 1.0f ); meshBuilder.Color3ub( color, color, color ); meshBuilder.AdvanceVertex(); color -= colorStep; if ( color < 0 ) color = 0; xx += w/numBands; } meshBuilder.End(); pMesh->Draw(); // red band color = color1; y += h; xx = x; meshBuilder.Begin( pMesh, MATERIAL_QUADS, numBands ); for ( int i=0; i<numBands+1; i++ ) { meshBuilder.Position3f( xx, y, 0.0f ); meshBuilder.TexCoord2f( 0, 0.0f, 0.0f ); meshBuilder.Color3ub( color, 0, 0 ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx+w/numBands, y, 0.0f ); meshBuilder.TexCoord2f( 0, 1.0f, 0.0f ); meshBuilder.Color3ub( color, 0, 0 ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx+w/numBands, y+h, 0.0f ); meshBuilder.TexCoord2f( 0, 1.0f, 1.0f ); meshBuilder.Color3ub( color, 0, 0 ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx, y+h, 0.0f ); meshBuilder.TexCoord2f( 0, 0.0f, 1.0f ); meshBuilder.Color3ub( color, 0, 0 ); meshBuilder.AdvanceVertex(); color -= colorStep; if ( color < 0 ) color = 0; xx += w/numBands; } meshBuilder.End(); pMesh->Draw(); // green band color = color1; y += h; xx = x; meshBuilder.Begin( pMesh, MATERIAL_QUADS, numBands ); for ( int i=0; i<numBands+1; i++ ) { meshBuilder.Position3f( xx, y, 0.0f ); meshBuilder.TexCoord2f( 0, 0.0f, 0.0f ); meshBuilder.Color3ub( 0, color, 0 ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx+w/numBands, y, 0.0f ); meshBuilder.TexCoord2f( 0, 1.0f, 0.0f ); meshBuilder.Color3ub( 0, color, 0 ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx+w/numBands, y+h, 0.0f ); meshBuilder.TexCoord2f( 0, 1.0f, 1.0f ); meshBuilder.Color3ub( 0, color, 0 ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx, y+h, 0.0f ); meshBuilder.TexCoord2f( 0, 0.0f, 1.0f ); meshBuilder.Color3ub( 0, color, 0 ); meshBuilder.AdvanceVertex(); color -= colorStep; if ( color < 0 ) color = 0; xx += w/numBands; } meshBuilder.End(); pMesh->Draw(); // blue band color = color1; y += h; xx = x; meshBuilder.Begin( pMesh, MATERIAL_QUADS, numBands ); for ( int i=0; i<numBands+1; i++ ) { meshBuilder.Position3f( xx, y, 0.0f ); meshBuilder.TexCoord2f( 0, 0.0f, 0.0f ); meshBuilder.Color3ub( 0, 0, color ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx+w/numBands, y, 0.0f ); meshBuilder.TexCoord2f( 0, 1.0f, 0.0f ); meshBuilder.Color3ub( 0, 0, color ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx+w/numBands, y+h, 0.0f ); meshBuilder.TexCoord2f( 0, 1.0f, 1.0f ); meshBuilder.Color3ub( 0, 0, color ); meshBuilder.AdvanceVertex(); meshBuilder.Position3f( xx, y+h, 0.0f ); meshBuilder.TexCoord2f( 0, 0.0f, 1.0f ); meshBuilder.Color3ub( 0, 0, color ); meshBuilder.AdvanceVertex(); color -= colorStep; if ( color < 0 ) color = 0; xx += w/numBands; } meshBuilder.End(); pMesh->Draw(); }
void CGizmo::DrawGizmoAxis(CRender3D *pRender, Vector& Origin, Vector& EndPoint, int red, int green, int blue, unsigned int uAxisHandle) { CCamera *pCamera = pRender->GetCamera(); Vector ViewUp; pCamera->GetViewUp(ViewUp); Vector ViewPoint; Vector ViewForward; pCamera->GetViewPoint(ViewPoint); VectorSubtract(Origin, ViewPoint, ViewForward); Vector Axis; VectorSubtract(EndPoint, Origin, Axis); CrossProduct(ViewForward, Axis, ViewUp); VectorNormalize(ViewUp); Vector Start; Vector End; // // Draw the first segment of the gizmo axis. // VectorMA(Origin, 0.1, Axis, Start); VectorMA(Origin, 0.25, Axis, End); pRender->BindTexture( g_pAxisTexture ); CMeshBuilder meshBuilder; CMatRenderContextPtr pRenderContext( MaterialSystemInterface() ); IMesh* pMesh = pRenderContext->GetDynamicMesh( ); meshBuilder.Begin( pMesh, MATERIAL_POLYGON, 4 ); meshBuilder.TexCoord2f(0, 0, 0); meshBuilder.Position3f(Start[0] - ViewUp[0] * GIZMO_AXIS_WIDTH, Start[1] - ViewUp[1] * GIZMO_AXIS_WIDTH, Start[2] - ViewUp[2] * GIZMO_AXIS_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f(0, 2, 0); meshBuilder.Position3f(End[0] - ViewUp[0] * GIZMO_AXIS_WIDTH, End[1] - ViewUp[1] * GIZMO_AXIS_WIDTH, End[2] - ViewUp[2] * GIZMO_AXIS_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f(0, 2, 1); meshBuilder.Position3f(End[0] + ViewUp[0] * GIZMO_AXIS_WIDTH, End[1] + ViewUp[1] * GIZMO_AXIS_WIDTH, End[2] + ViewUp[2] * GIZMO_AXIS_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f(0, 0, 1); meshBuilder.Position3f(Start[0] + ViewUp[0] * GIZMO_AXIS_WIDTH, Start[1] + ViewUp[1] * GIZMO_AXIS_WIDTH, Start[2] + ViewUp[2] * GIZMO_AXIS_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.End(); pMesh->Draw(); // // Draw the scale handle. // Start = End; VectorMA(Origin, 0.35, Axis, End); pRender->BeginRenderHitTarget(this, uAxisHandle + GIZMO_HANDLE_SCALE); pRender->BindTexture( g_pScaleHandleTexture ); pMesh = pRenderContext->GetDynamicMesh( ); meshBuilder.Begin( pMesh, MATERIAL_POLYGON, 4 ); meshBuilder.TexCoord2f( 0, 0, 0); meshBuilder.Position3f(Start[0] - ViewUp[0] * GIZMO_HANDLE_WIDTH, Start[1] - ViewUp[1] * GIZMO_HANDLE_WIDTH, Start[2] - ViewUp[2] * GIZMO_HANDLE_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f( 0, 1, 0); meshBuilder.Position3f(End[0] - ViewUp[0] * GIZMO_HANDLE_WIDTH, End[1] - ViewUp[1] * GIZMO_HANDLE_WIDTH, End[2] - ViewUp[2] * GIZMO_HANDLE_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f( 0, 1, 1); meshBuilder.Position3f(End[0] + ViewUp[0] * GIZMO_HANDLE_WIDTH, End[1] + ViewUp[1] * GIZMO_HANDLE_WIDTH, End[2] + ViewUp[2] * GIZMO_HANDLE_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f( 0, 0, 1); meshBuilder.Position3f(Start[0] + ViewUp[0] * GIZMO_HANDLE_WIDTH, Start[1] + ViewUp[1] * GIZMO_HANDLE_WIDTH, Start[2] + ViewUp[2] * GIZMO_HANDLE_WIDTH); meshBuilder.AdvanceVertex(); meshBuilder.End(); pMesh->Draw(); pRender->EndRenderHitTarget(); // // Draw the second segment of the gizmo axis. // Start = End; VectorMA(Origin, 0.5, Axis, End); pRender->BindTexture( g_pAxisTexture ); pMesh = pRenderContext->GetDynamicMesh( ); meshBuilder.Begin( pMesh, MATERIAL_POLYGON, 4 ); meshBuilder.TexCoord2f( 0, 0, 0); meshBuilder.Position3f(Start[0] - ViewUp[0] * GIZMO_AXIS_WIDTH, Start[1] - ViewUp[1] * GIZMO_AXIS_WIDTH, Start[2] - ViewUp[2] * GIZMO_AXIS_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f( 0, 2, 0); meshBuilder.Position3f(End[0] - ViewUp[0] * GIZMO_AXIS_WIDTH, End[1] - ViewUp[1] * GIZMO_AXIS_WIDTH, End[2] - ViewUp[2] * GIZMO_AXIS_WIDTH); meshBuilder.AdvanceVertex(); meshBuilder.Color3ub(red, green, blue); meshBuilder.TexCoord2f( 0, 2, 1); meshBuilder.Position3f(End[0] + ViewUp[0] * GIZMO_AXIS_WIDTH, End[1] + ViewUp[1] * GIZMO_AXIS_WIDTH, End[2] + ViewUp[2] * GIZMO_AXIS_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f( 0, 0, 1); meshBuilder.Position3f(Start[0] + ViewUp[0] * GIZMO_AXIS_WIDTH, Start[1] + ViewUp[1] * GIZMO_AXIS_WIDTH, Start[2] + ViewUp[2] * GIZMO_AXIS_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.End(); pMesh->Draw(); // // Draw the rotate handle. // Start = End; VectorMA(Origin, 0.6, Axis, End); pRender->BeginRenderHitTarget(this, uAxisHandle + GIZMO_HANDLE_ROTATE); pRender->BindTexture( g_pRotateHandleTexture ); pMesh = pRenderContext->GetDynamicMesh( ); meshBuilder.Begin( pMesh, MATERIAL_POLYGON, 4 ); meshBuilder.TexCoord2f( 0, 0, 0); meshBuilder.Position3f(Start[0] - ViewUp[0] * GIZMO_HANDLE_WIDTH, Start[1] - ViewUp[1] * GIZMO_HANDLE_WIDTH, Start[2] - ViewUp[2] * GIZMO_HANDLE_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f( 0, 1, 0); meshBuilder.Position3f(End[0] - ViewUp[0] * GIZMO_HANDLE_WIDTH, End[1] - ViewUp[1] * GIZMO_HANDLE_WIDTH, End[2] - ViewUp[2] * GIZMO_HANDLE_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f( 0, 1, 1); meshBuilder.Position3f(End[0] + ViewUp[0] * GIZMO_HANDLE_WIDTH, End[1] + ViewUp[1] * GIZMO_HANDLE_WIDTH, End[2] + ViewUp[2] * GIZMO_HANDLE_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f( 0, 0, 1); meshBuilder.Position3f(Start[0] + ViewUp[0] * GIZMO_HANDLE_WIDTH, Start[1] + ViewUp[1] * GIZMO_HANDLE_WIDTH, Start[2] + ViewUp[2] * GIZMO_HANDLE_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.End(); pMesh->Draw(); pRender->EndRenderHitTarget(); // // Draw the third segment of the gizmo axis. // Start = End; VectorMA(Origin, 0.75, Axis, End); pRender->BindTexture( g_pAxisTexture ); pMesh = pRenderContext->GetDynamicMesh( ); meshBuilder.Begin( pMesh, MATERIAL_POLYGON, 4 ); meshBuilder.TexCoord2f( 0, 0, 0); meshBuilder.Position3f(Start[0] - ViewUp[0] * GIZMO_AXIS_WIDTH, Start[1] - ViewUp[1] * GIZMO_AXIS_WIDTH, Start[2] - ViewUp[2] * GIZMO_AXIS_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f( 0, 2, 0); meshBuilder.Position3f(End[0] - ViewUp[0] * GIZMO_AXIS_WIDTH, End[1] - ViewUp[1] * GIZMO_AXIS_WIDTH, End[2] - ViewUp[2] * GIZMO_AXIS_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f( 0, 2, 1); meshBuilder.Position3f(End[0] + ViewUp[0] * GIZMO_AXIS_WIDTH, End[1] + ViewUp[1] * GIZMO_AXIS_WIDTH, End[2] + ViewUp[2] * GIZMO_AXIS_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f( 0, 0, 1); meshBuilder.Position3f(Start[0] + ViewUp[0] * GIZMO_AXIS_WIDTH, Start[1] + ViewUp[1] * GIZMO_AXIS_WIDTH, Start[2] + ViewUp[2] * GIZMO_AXIS_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.End(); pMesh->Draw(); // // Draw the translate handle (arrowhead). // Start = End; pRender->BeginRenderHitTarget(this, uAxisHandle + GIZMO_HANDLE_TRANSLATE); pRender->BindTexture( g_pTranslateHandleTexture ); pMesh = pRenderContext->GetDynamicMesh( ); meshBuilder.Begin( pMesh, MATERIAL_TRIANGLES, 1 ); meshBuilder.TexCoord2f( 0, 0, 0); meshBuilder.Position3f(Start[0] - ViewUp[0] * GIZMO_HANDLE_WIDTH, Start[1] - ViewUp[1] * GIZMO_HANDLE_WIDTH, Start[2] - ViewUp[2] * GIZMO_HANDLE_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f( 0, 1, 0.5); meshBuilder.Position3f(EndPoint[0], EndPoint[1], EndPoint[2]); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.TexCoord2f( 0, 0, 1); meshBuilder.Position3f(Start[0] + ViewUp[0] * GIZMO_HANDLE_WIDTH, Start[1] + ViewUp[1] * GIZMO_HANDLE_WIDTH, Start[2] + ViewUp[2] * GIZMO_HANDLE_WIDTH); meshBuilder.Color3ub(red, green, blue); meshBuilder.AdvanceVertex(); meshBuilder.End(); pMesh->Draw(); pRender->EndRenderHitTarget(); }