Changeset 25323
- Timestamp:
- Apr 26, 2021, 11:11:35 PM (3 years ago)
- Location:
- ps/trunk/source/renderer
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
ps/trunk/source/renderer/DebugRenderer.cpp
r25315 r25323 138 138 } 139 139 140 void CDebugRenderer::DrawCameraFrustum(const CCamera& camera, int intermediates) const140 void CDebugRenderer::DrawCameraFrustum(const CCamera& camera, int intermediates) const 141 141 { 142 142 #if CONFIG2_GLES … … 154 154 } 155 155 156 // near plane 157 glBegin(GL_POLYGON); 158 glVertex3fv(&nearPoints[0].X); 159 glVertex3fv(&nearPoints[1].X); 160 glVertex3fv(&nearPoints[2].X); 161 glVertex3fv(&nearPoints[3].X); 162 glEnd(); 163 164 // far plane 165 glBegin(GL_POLYGON); 166 glVertex3fv(&farPoints[0].X); 167 glVertex3fv(&farPoints[1].X); 168 glVertex3fv(&farPoints[2].X); 169 glVertex3fv(&farPoints[3].X); 170 glEnd(); 171 172 // connection lines 173 glBegin(GL_QUAD_STRIP); 174 glVertex3fv(&nearPoints[0].X); 175 glVertex3fv(&farPoints[0].X); 176 glVertex3fv(&nearPoints[1].X); 177 glVertex3fv(&farPoints[1].X); 178 glVertex3fv(&nearPoints[2].X); 179 glVertex3fv(&farPoints[2].X); 180 glVertex3fv(&nearPoints[3].X); 181 glVertex3fv(&farPoints[3].X); 182 glVertex3fv(&nearPoints[0].X); 183 glVertex3fv(&farPoints[0].X); 184 glEnd(); 185 186 // intermediate planes 156 CShaderTechniquePtr overlayTech = 157 g_Renderer.GetShaderManager().LoadEffect(str_debug_line); 158 overlayTech->BeginPass(); 159 CShaderProgramPtr overlayShader = overlayTech->GetShader(); 160 161 overlayShader->Bind(); 162 overlayShader->Uniform(str_transform, g_Renderer.GetViewCamera().GetViewProjection()); 163 overlayShader->Uniform(str_color, color); 164 165 std::vector<float> vertices; 166 #define ADD(position) \ 167 vertices.emplace_back((position).X); \ 168 vertices.emplace_back((position).Y); \ 169 vertices.emplace_back((position).Z); 170 171 // Near plane. 172 ADD(nearPoints[0]); 173 ADD(nearPoints[1]); 174 ADD(nearPoints[2]); 175 ADD(nearPoints[3]); 176 177 // Far plane. 178 ADD(farPoints[0]); 179 ADD(farPoints[1]); 180 ADD(farPoints[2]); 181 ADD(farPoints[3]); 182 183 // Intermediate planes. 187 184 CVector3D intermediatePoints[4]; 188 185 for(int i = 0; i < intermediates; ++i) 189 186 { 190 float t = (i + 1.0f) / (intermediates + 1.0f);187 float t = (i + 1.0f) / (intermediates + 1.0f); 191 188 192 189 for(int j = 0; j < 4; ++j) 193 190 intermediatePoints[j] = nearPoints[j] * t + farPoints[j] * (1.0f - t); 194 191 195 glBegin(GL_POLYGON); 196 glVertex3fv(&intermediatePoints[0].X); 197 glVertex3fv(&intermediatePoints[1].X); 198 glVertex3fv(&intermediatePoints[2].X); 199 glVertex3fv(&intermediatePoints[3].X); 200 glEnd(); 201 } 192 ADD(intermediatePoints[0]); 193 ADD(intermediatePoints[1]); 194 ADD(intermediatePoints[2]); 195 ADD(intermediatePoints[3]); 196 } 197 198 overlayShader->VertexPointer(3, GL_FLOAT, 0, vertices.data()); 199 overlayShader->AssertPointersBound(); 200 glDrawArrays(GL_QUADS, 0, vertices.size() / 3); 201 202 vertices.clear(); 203 204 // Connection lines. 205 ADD(nearPoints[0]); 206 ADD(farPoints[0]); 207 ADD(nearPoints[1]); 208 ADD(farPoints[1]); 209 ADD(nearPoints[2]); 210 ADD(farPoints[2]); 211 ADD(nearPoints[3]); 212 ADD(farPoints[3]); 213 ADD(nearPoints[0]); 214 ADD(farPoints[0]); 215 216 overlayShader->VertexPointer(3, GL_FLOAT, 0, vertices.data()); 217 overlayShader->AssertPointersBound(); 218 glDrawArrays(GL_QUAD_STRIP, 0, vertices.size() / 3); 219 #undef ADD 220 221 overlayShader->Unbind(); 222 overlayTech->EndPass(); 202 223 #endif 203 224 } -
ps/trunk/source/renderer/DebugRenderer.h
r25315 r25323 53 53 * be hinted at between the near and far planes 54 54 */ 55 void DrawCameraFrustum(const CCamera& camera, int intermediates = 0) const;55 void DrawCameraFrustum(const CCamera& camera, int intermediates = 0) const; 56 56 57 57 /** -
ps/trunk/source/renderer/TerrainOverlay.cpp
r24154 r25323 1 /* Copyright (C) 202 0Wildfire Games.1 /* Copyright (C) 202 Wildfire Games. 2 2 * This file is part of 0 A.D. 3 3 * … … 21 21 22 22 #include "graphics/Color.h" 23 24 23 25 #include "graphics/Terrain.h" 24 26 #include "lib/bits.h" … … 183 185 #else 184 186 185 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);186 187 187 CVector3D pos[2][2]; 188 188 for (int di = 0; di < 2; ++di) … … 190 190 m_Terrain->CalcPosition(i + di, j + dj, pos[di][dj]); 191 191 192 glBegin(GL_TRIANGLES); 193 glColor4fv(color.FloatArray()); 194 if (m_Terrain->GetTriangulationDir(i, j)) 195 { 196 glVertex3fv(pos[0][0].GetFloatArray()); 197 glVertex3fv(pos[1][0].GetFloatArray()); 198 glVertex3fv(pos[0][1].GetFloatArray()); 199 200 glVertex3fv(pos[1][0].GetFloatArray()); 201 glVertex3fv(pos[1][1].GetFloatArray()); 202 glVertex3fv(pos[0][1].GetFloatArray()); 203 } 204 else 205 { 206 glVertex3fv(pos[0][0].GetFloatArray()); 207 glVertex3fv(pos[1][0].GetFloatArray()); 208 glVertex3fv(pos[1][1].GetFloatArray()); 209 210 glVertex3fv(pos[1][1].GetFloatArray()); 211 glVertex3fv(pos[0][1].GetFloatArray()); 212 glVertex3fv(pos[0][0].GetFloatArray()); 213 } 214 glEnd(); 215 192 std::vector<float> vertices; 193 #define ADD(position) \ 194 vertices.emplace_back((position).X); \ 195 vertices.emplace_back((position).Y); \ 196 vertices.emplace_back((position).Z); 197 198 if (m_Terrain->GetTriangulationDir(i, j)) 199 { 200 ADD(pos[0][0]); 201 ADD(pos[1][0]); 202 ADD(pos[0][1]); 203 204 ADD(pos[1][0]); 205 ADD(pos[1][1]); 206 ADD(pos[0][1]); 207 } 208 else 209 { 210 ADD(pos[0][0]); 211 ADD(pos[1][0]); 212 ADD(pos[1][1]); 213 214 ADD(pos[1][1]); 215 ADD(pos[0][1]); 216 ADD(pos[0][0]); 217 } 218 #undef ADD 219 220 CShaderTechniquePtr overlayTech = 221 g_Renderer.GetShaderManager().LoadEffect(str_debug_line); 222 overlayTech->BeginPass(); 223 CShaderProgramPtr overlayShader = overlayTech->GetShader(); 224 225 overlayShader->Bind(); 226 overlayShader->Uniform(str_transform, g_Renderer.GetViewCamera().GetViewProjection()); 227 overlayShader->Uniform(str_color, color); 228 229 overlayShader->VertexPointer(3, GL_FLOAT, 0, vertices.data()); 230 overlayShader->AssertPointersBound(); 231 232 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); 233 glDrawArrays(GL_TRIANGLES, 0, vertices.size() / 3); 234 235 overlayShader->Unbind(); 236 overlayTech->EndPass(); 216 237 #endif 217 238 } … … 244 265 glLineWidth((float)line_width); 245 266 246 CVector3D pos; 247 glBegin(GL_QUADS); 248 glColor4fv(color.FloatArray()); 249 m_Terrain->CalcPosition(i, j, pos); glVertex3fv(pos.GetFloatArray()); 250 m_Terrain->CalcPosition(i+1, j, pos); glVertex3fv(pos.GetFloatArray()); 251 m_Terrain->CalcPosition(i+1, j+1, pos); glVertex3fv(pos.GetFloatArray()); 252 m_Terrain->CalcPosition(i, j+1, pos); glVertex3fv(pos.GetFloatArray()); 253 glEnd(); 267 std::vector<float> vertices; 268 #define ADD(i, j) \ 269 m_Terrain->CalcPosition(i, j, position); \ 270 vertices.emplace_back(position.X); \ 271 vertices.emplace_back(position.Y); \ 272 vertices.emplace_back(position.Z); 273 274 CVector3D position; 275 ADD(i, j); 276 ADD(i+1, j); 277 ADD(i+1, j+1); 278 ADD(i, j+1); 279 #undef ADD 280 281 CShaderTechniquePtr overlayTech = 282 g_Renderer.GetShaderManager().LoadEffect(str_debug_line); 283 overlayTech->BeginPass(); 284 CShaderProgramPtr overlayShader = overlayTech->GetShader(); 285 286 overlayShader->Bind(); 287 overlayShader->Uniform(str_transform, g_Renderer.GetViewCamera().GetViewProjection()); 288 overlayShader->Uniform(str_color, color); 289 290 overlayShader->VertexPointer(3, GL_FLOAT, 0, vertices.data()); 291 overlayShader->AssertPointersBound(); 292 293 glDrawArrays(GL_QUADS, 0, vertices.size() / 3); 294 295 overlayShader->Unbind(); 296 overlayTech->EndPass(); 254 297 255 298 if (line_width != 1) 256 299 glLineWidth(1.0f); 257 258 300 #endif 259 301 }
Note:
See TracChangeset
for help on using the changeset viewer.