llbox.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:4k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llbox.cpp
  3.  * @brief Draws a box using display lists for speed.
  4.  *
  5.  * $LicenseInfo:firstyear=2001&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2001-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #include "llviewerprecompiledheaders.h"
  33. #include "llbox.h"
  34. #include "llgl.h"
  35. #include "llrender.h"
  36. #include "llglheaders.h"
  37. LLBox gBox;
  38. // These routines support multiple textures on a box
  39. void LLBox::prerender()
  40. {
  41. F32 size = 1.f;
  42. mTriangleCount = 6 * 2;
  43. mVertex[0][0] = mVertex[1][0] = mVertex[2][0] = mVertex[3][0] = -size / 2;
  44. mVertex[4][0] = mVertex[5][0] = mVertex[6][0] = mVertex[7][0] =  size / 2;
  45. mVertex[0][1] = mVertex[1][1] = mVertex[4][1] = mVertex[5][1] = -size / 2;
  46. mVertex[2][1] = mVertex[3][1] = mVertex[6][1] = mVertex[7][1] =  size / 2;
  47. mVertex[0][2] = mVertex[3][2] = mVertex[4][2] = mVertex[7][2] = -size / 2;
  48. mVertex[1][2] = mVertex[2][2] = mVertex[5][2] = mVertex[6][2] =  size / 2;
  49. }
  50. // These routines support multiple textures on a box
  51. void LLBox::cleanupGL()
  52. {
  53. // No GL state, a noop.
  54. }
  55. void LLBox::renderface(S32 which_face)
  56. {
  57. /*static F32 normals[6][3] =
  58. {
  59. {-1.0f,  0.0f,  0.0f},
  60. { 0.0f,  1.0f,  0.0f},
  61. { 1.0f,  0.0f,  0.0f},
  62. { 0.0f, -1.0f,  0.0f},
  63. { 0.0f,  0.0f,  1.0f},
  64. { 0.0f,  0.0f, -1.0f}
  65. };*/
  66. static S32 faces[6][4] =
  67. {
  68. {0, 1, 2, 3},
  69. {3, 2, 6, 7},
  70. {7, 6, 5, 4},
  71. {4, 5, 1, 0},
  72. {5, 6, 2, 1},
  73. {7, 4, 0, 3}
  74. };
  75. gGL.begin(LLRender::QUADS);
  76. //gGL.normal3fv(&normals[which_face][0]);
  77. gGL.texCoord2f(1,0);
  78. gGL.vertex3fv(&mVertex[ faces[which_face][0] ][0]);
  79. gGL.texCoord2f(1,1);
  80. gGL.vertex3fv(&mVertex[ faces[which_face][1] ][0]);
  81. gGL.texCoord2f(0,1);
  82. gGL.vertex3fv(&mVertex[ faces[which_face][2] ][0]);
  83. gGL.texCoord2f(0,0);
  84. gGL.vertex3fv(&mVertex[ faces[which_face][3] ][0]);
  85. gGL.end();
  86. }
  87. void LLBox::render()
  88. {
  89.     // This is a flattend representation of the box as render here
  90.     //                                       .
  91.     //              (-++)        (+++)      /|t
  92.     //                +------------+         | (texture coordinates)
  93.     //                |2          1|         |
  94.     //                |     4      |        (*) --->s
  95.     //                |    TOP     |
  96.     //                |            |
  97.     // (-++)     (--+)|3          0|(+-+)     (+++)        (-++)
  98.     //   +------------+------------+------------+------------+
  99.     //   |2          1|2          1|2          1|2          1|
  100.     //   |     0      |     1      |     2      |     3      |
  101.     //   |   BACK     |   RIGHT    |   FRONT    |   LEFT     |
  102.     //   |            |            |            |            |
  103.     //   |3          0|3          0|3          0|3          0|
  104.     //   +------------+------------+------------+------------+
  105.     // (-+-)     (---)|2          1|(+--)     (++-)        (-+-)
  106.     //                |     5      |
  107.     //                |   BOTTOM   |
  108.     //                |            |
  109.     //                |3          0|
  110.     //                +------------+
  111.     //              (-+-)        (++-)
  112. renderface(5);
  113. renderface(4);
  114. renderface(3);
  115. renderface(2);
  116. renderface(1);
  117. renderface(0);
  118. gGL.flush();
  119. }