| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697 |
- #include "Crown.h"
- #include <time.h>
- #include <cstdlib>
- #include <iostream>
- #include <ft2build.h>
- #include FT_FREETYPE_H
- #include FT_GLYPH_H
- #include "Types.h"
- #define HMSIZE 256
- #define CubeSize 2/3.0f
- void DrawAxis();
- void DrawGrid(float xStart, float zStart, float xStep, float zStep);
- void DrawWiredCube(float x, float y, float z);
- void DrawCube(float x, float y, float z);
- void DrawVoxelGrid(float xStart, float yStart, float zStart, float xStep, float yStep, float zStep);
- using namespace Crown;
- enum Visibility
- {
- V_Visible,
- V_Hidden_Opt,
- V_Hidden,
- };
- enum FaceOrientation
- {
- FO_TOP,
- FO_BOTTOM,
- FO_LEFT,
- FO_RIGHT,
- FO_FRONT,
- FO_BACK
- };
- struct Block {
- Visibility visible;
- };
- class Chunk {
- public:
- Chunk() {
- Clear();
- vb = NULL;
- ib = NULL;
- }
- void Clear() {
- mVertexCount = 0;
- mVertexList.Clear();
- for(int x = 0; x < HMSIZE; x++) {
- for(int z = 0; z < HMSIZE; z++) {
- for(int h = 0; h < HMSIZE; h++) {
- mBlocks[x][z][h].visible = V_Hidden;
- }
- }
- }
- }
- void Render() {
- vb->MakeCurrent();
- ib->MakeCurrent();
- ib->Render(Vec3(0, 0, 0), Vec3(0, 0, 0), 0.0f);
- }
- void RandomMap() {
- srand(time(NULL));
- Clear();
- for(int n = 0; n < 100; n++) {
- int xmin, xmax, zmin, zmax;
- int a, b;
- a = rand()%HMSIZE;
- b = rand()%HMSIZE;
- xmin = Math::Min(a, b);
- xmax = Math::Max(a, b);
- a = rand()%HMSIZE;
- b = rand()%HMSIZE;
- zmin = Math::Min(a, b);
- zmax = Math::Max(a, b);
- for(int x = xmin; x < xmax; x++) {
- for(int z = zmin; z < zmax; z++) {
- int h = 0;
- while (mBlocks[x][z][h].visible == V_Visible)
- h++;
- mBlocks[x][z][h].visible = V_Visible;
- }
- }
- }
- RegenerateVertexList();
- }
- void RegenerateVertexList() {
- mVertexCount = 0;
- mVertexList.Clear();
- for(int x = 0; x < HMSIZE; x++) {
- for(int z = 0; z < HMSIZE; z++) {
- for(int h = 0; h < HMSIZE; h++) {
- if (mBlocks[x][z][h].visible == V_Visible)
- GenerateFaces(x, z, h);
- }
- }
- }
- if (!vb)
- vb = GetDevice()->GetRenderer()->CreateVertexBuffer();
- if (!ib)
- ib = GetDevice()->GetRenderer()->CreateIndexBuffer();
- vb->SetVertexData(VBM_COLOR_COORDS, mVertexList.GetData(), mVertexCount);
- List<unsigned int> indexes;
- for(int i=0; i<mVertexCount; i++)
- indexes.Append(i);
- ib->SetIndexData(indexes.GetData(), mVertexCount);
- mVertexList.Clear();
- }
- void GenerateFaces(int x, int z, int h) {
- AddFace(x, z, h, FO_TOP , x , z , h+1);
- AddFace(x, z, h, FO_BOTTOM, x , z , h-1);
- AddFace(x, z, h, FO_LEFT , x-1, z , h);
- AddFace(x, z, h, FO_RIGHT , x+1, z , h);
- AddFace(x, z, h, FO_FRONT , x , z+1, h);
- AddFace(x, z, h, FO_BACK , x , z-1, h);
- }
- void AddFace(int x, int z, int h, FaceOrientation orientation, int x1, int z1, int h1) {
- if (!(x1 < 0 || x1 > HMSIZE-1 || z1 < 0 || z1 > HMSIZE-1 || h1 < 0 || h1 > HMSIZE-1))
- if (mBlocks[x1][z1][h1].visible == V_Visible)
- return;
- float xx = x * CubeSize;
- float zz = z * CubeSize;
- float hh = h * CubeSize;
- switch (orientation) {
- case FO_TOP:
- AppendVertex(xx , hh + CubeSize, zz);
- AppendColor(.3f, .0f, .0f);
- AppendVertex(xx + CubeSize, hh + CubeSize, zz);
- AppendColor(.25f, .0f, .0f);
- AppendVertex(xx + CubeSize, hh + CubeSize, zz - CubeSize);
- AppendColor(.3f, .0f, .0f);
- AppendVertex(xx , hh + CubeSize, zz - CubeSize);
- AppendColor(.25f, .0f, .0f);
- break;
- case FO_BOTTOM:
- AppendVertex(xx , hh, zz);
- AppendColor(.0f, .0f, .3f);
- AppendVertex(xx , hh, zz - CubeSize);
- AppendColor(.0f, .0f, .25f);
- AppendVertex(xx + CubeSize, hh, zz - CubeSize);
- AppendColor(.0f, .0f, .3f);
- AppendVertex(xx + CubeSize, hh, zz);
- AppendColor(.0f, .0f, .25f);
- break;
- case FO_LEFT:
- AppendVertex(xx, hh , zz);
- AppendColor(.0f, .0f, .3f);
- AppendVertex(xx, hh + CubeSize, zz);
- AppendColor(.0f, .0f, .25f);
- AppendVertex(xx, hh + CubeSize, zz - CubeSize);
- AppendColor(.0f, .0f, .3f);
- AppendVertex(xx, hh , zz - CubeSize);
- AppendColor(.0f, .0f, .25f);
- break;
- case FO_RIGHT:
- AppendVertex(xx + CubeSize, hh , zz);
- AppendColor(.0f, .0f, .3f);
- AppendVertex(xx + CubeSize, hh , zz - CubeSize);
- AppendColor(.0f, .0f, .25f);
- AppendVertex(xx + CubeSize, hh + CubeSize, zz - CubeSize);
- AppendColor(.0f, .0f, .3f);
- AppendVertex(xx + CubeSize, hh + CubeSize, zz);
- AppendColor(.0f, .0f, .25f);
- break;
- case FO_FRONT:
- AppendVertex(xx , hh , zz);
- AppendColor(.0f, .0f, .3f);
- AppendVertex(xx + CubeSize, hh , zz);
- AppendColor(.0f, .0f, .25f);
- AppendVertex(xx + CubeSize, hh + CubeSize, zz);
- AppendColor(.0f, .0f, .3f);
- AppendVertex(xx , hh + CubeSize, zz);
- AppendColor(.0f, .0f, .25f);
- break;
- case FO_BACK:
- AppendVertex(xx , hh , zz - CubeSize);
- AppendColor(.0f, .0f, .3f);
- AppendVertex(xx , hh + CubeSize, zz - CubeSize);
- AppendColor(.0f, .0f, .25f);
- AppendVertex(xx + CubeSize, hh + CubeSize, zz - CubeSize);
- AppendColor(.0f, .0f, .3f);
- AppendVertex(xx + CubeSize, hh , zz - CubeSize);
- AppendColor(.0f, .0f, .25f);
- break;
- }
- mVertexCount += 4;
- }
- void AppendVertex(float x, float y, float z) {
- mVertexList.Append(x);
- mVertexList.Append(y);
- mVertexList.Append(z);
- }
- void AppendColor(float r, float g, float b) {
- mVertexList.Append(r);
- mVertexList.Append(g);
- mVertexList.Append(b);
- }
- void Optimize() {
-
- for(int x = 1; x < HMSIZE-1; x++) {
- for(int y = 1; y < HMSIZE-1; y++) {
- for(int z = 1; z < HMSIZE-1; z++) {
- if (mBlocks[x][y][z].visible == V_Visible) {
- if (mBlocks[x-1][y][z].visible != V_Visible && mBlocks[x-1][y][z].visible != V_Hidden_Opt)
- continue;
- if (mBlocks[x+1][y][z].visible != V_Visible && mBlocks[x+1][y][z].visible != V_Hidden_Opt)
- continue;
- if (mBlocks[x][y-1][z].visible != V_Visible && mBlocks[x][y-1][z].visible != V_Hidden_Opt)
- continue;
- if (mBlocks[x][y+1][z].visible != V_Visible && mBlocks[x][y+1][z].visible != V_Hidden_Opt)
- continue;
- if (mBlocks[x][y][z-1].visible != V_Visible && mBlocks[x][y][z-1].visible != V_Hidden_Opt)
- continue;
- if (mBlocks[x][y][z+1].visible != V_Visible && mBlocks[x][y][z+1].visible != V_Hidden_Opt)
- continue;
- mBlocks[x][y][z].visible = V_Hidden_Opt;
- }
- }
- }
- }
- for(int x = 1; x < HMSIZE-1; x++) {
- for(int y = 1; y < HMSIZE-1; y++) {
- for(int z = 1; z < HMSIZE-1; z++) {
- if (mBlocks[x][y][z].visible == V_Hidden_Opt) {
- mBlocks[x][y][z].visible = V_Hidden;
- }
- }
- }
- }
- }
- private:
- Block mBlocks[HMSIZE][HMSIZE][HMSIZE];
- List<float> mVertexList;
- int mVertexCount;
- VertexBuffer* vb;
- IndexBuffer* ib;
- };
- Chunk chunk;
- class InputReceiver : public EventReceiver {
- public:
- InputReceiver() {
- mDevice = GetDevice();
- mDevice->GetEventDispatcher()->RegisterEventReceiver(this);
- }
- void HandleEvent(const Event& event) {
- if (event.event_type == ET_KEYBOARD) {
- if (event.keyboard.type == KET_RELEASED) {
- if (event.keyboard.key == KK_ESCAPE) {
- if (mDevice) {
- mDevice->StopRunning();
- }
- }
- if (event.keyboard.key == KK_SPACE) {
- chunk.RandomMap();
- }
- }
- }
- }
- private:
- Device* mDevice;
- };
- int main(int argc, char** argv) {
- int wndW, wndH;
- wndW = 1280;
- wndH = 800;
- bool full = false;
- if (argc == 3) {
- wndW = atoi(argv[1]);
- wndH = atoi(argv[2]);
- }
- Device* device = GetDevice();
- if (!device->Init(wndW, wndH, 32, false)) {
- return 0;
- }
- InputReceiver ir;
- Renderer* renderer = device->GetRenderer();
- SceneManager* smgr = device->GetSceneManager();
- ResourceManager* resman = device->GetResourceManager();
- device->GetMainWindow()->SetTitle("Crown Engine v0.1");
- device->GetMainWindow()->GetCursorControl()->SetVisible(true);
- device->GetMainWindow()->SetFullscreen(full);
- Scene* scene = new Scene();
- MovableCamera* cam;
- cam = scene->AddMovableCamera(
- 0,
- Vec3(0.0f, 3.0f, HMSIZE*CubeSize),
- Angles(0, 0, 0),
- Vec3(1, 1, 1),
- true,
- 90.0f,
- 1.59f,
- true,
- 0.5,
- 1);
- cam->SetActive(true);
- cam->SetSpeed(0.1);
- cam->SetFarClipDistance(150.0f);
- std::cout << "Entity count: " << scene->GetEntityCount() << std::endl;
- std::cout << "Light count: " << scene->GetLightCount() << std::endl;
- std::cout << "Sizeof RenderWindow: " << sizeof(RenderWindow) << std::endl;
- /*
- Material material;
- material.mAmbient = Color(0.1, 0.1, 0.1, 1);
- material.mDiffuse = Color(1, 1, 1, 1);
- material.mSpecular = Color(0, 0, 0, 1);
- material.mShininess = 128;
- material.mSeparateSpecularColor = true;
- material.mTexturing = false;
- material.mLighting = true;
- renderer->SetMaterial(material);
- */
- Mat4 identity;
- identity.LoadIdentity();
- renderer->SetClearColor(Color(1.0f, 1.0f, 1.0f, 1.0f));
- Mat4 ortho;
- ortho.BuildProjectionOrthoRH(wndW, wndH, 1, -1);
- Mat4 perspective;
- perspective.BuildProjectionPerspectiveRH(90.0f, 1.59f, 0.1f, 100.0f);
- Mat4 text;
- text.LoadIdentity();
- text.SetTranslation(Vec3(400, 350, 0));
- //Crown::Font font;
- //Image* testImg = font.LoadFont("tests/font/arialbd.ttf");
- glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- chunk.RandomMap();
- ////struct MyVertex
- //// {
- //// float x, y, z; //Vertex
- //// float r, g, b;
- //// //float nx, ny, nz; //Normal
- //// //float s0, t0; //Texcoord0
- //// };
- ////
- //// MyVertex pvertex[4];
- //// //VERTEX 0
- //// pvertex[0].x = 0.0;
- //// pvertex[0].y = 0.0;
- //// pvertex[0].z = 0.0;
- //// pvertex[0].r = 1.0f;
- //// pvertex[0].g = 0.0f;
- //// pvertex[0].b = 0.0f;
- ////
- //// //VERTEX 1
- //// pvertex[1].x = 1.0;
- //// pvertex[1].y = 0.0;
- //// pvertex[1].z = 0.0;
- //// pvertex[1].r = 1.0f;
- //// pvertex[1].g = 1.0f;
- //// pvertex[1].b = 0.0f;
- ////
- //// //VERTEX 2
- //// pvertex[2].x = 1.0;
- //// pvertex[2].y = 1.0;
- //// pvertex[2].z = 0.0;
- //// pvertex[2].r = 0.0f;
- //// pvertex[2].g = 1.0f;
- //// pvertex[2].b = 0.0f;
- ////
- //// pvertex[3].x = 0.0;
- //// pvertex[3].y = 1.0;
- //// pvertex[3].z = 0.0;
- //// pvertex[3].r = 0.0f;
- //// pvertex[3].g = 1.0f;
- //// pvertex[3].b = 0.0f;
- ////
- ////
- //// uint VertexVBOID;
- //// uint IndexVBOID;
- ////
- //// glGenBuffers(1, &VertexVBOID);
- //// glBindBuffer(GL_ARRAY_BUFFER, VertexVBOID);
- //// glBufferData(GL_ARRAY_BUFFER, sizeof(MyVertex)*4, pvertex, GL_DYNAMIC_DRAW);
- ////
- //// ushort pindices[4];
- //// pindices[0] = 0;
- //// pindices[1] = 1;
- //// pindices[2] = 2;
- //// pindices[3] = 3;
- ////
- //// glGenBuffers(1, &IndexVBOID);
- //// glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IndexVBOID);
- //// glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(ushort)*4, pindices, GL_DYNAMIC_DRAW);
- ////
- //// //Define this somewhere in your header file
- //// #define BUFFER_OFFSET(i) ((char *)NULL + (i))
- while (device->IsRunning()) {
- WindowEventHandler::GetInstance()->ManageEvents();
- GetDevice()->GetMainWindow()->GetRenderContext()->MakeCurrent();
- // ----------- Begin Scene -----------
- renderer->BeginScene();
- renderer->SetMatrix(MT_PROJECTION, ortho);
- //renderer->SetMatrix(MT_MODEL, text);
- glDisable(GL_LIGHTING);
- glColor3f(1, 1, 1);
- //glDrawPixels(testImg->GetWidth(), testImg->GetHeight(), GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, testImg->GetBuffer());
- cam->Render();
- //renderer->SetMatrix(MT_PROJECTION, perspective);
- renderer->SetMatrix(MT_MODEL, identity);
- DrawAxis();
- //DrawGrid(-0.0f, 0.0f, 2/3.0f, 2/3.0f);
- //DrawVoxelGrid(0.0f, 0.0f, 0.0f, 2/3.0f, 2/3.0f, 2/3.0f);
- chunk.Render();
- ////glBindBuffer(GL_ARRAY_BUFFER, VertexVBOID);
- ////glEnableClientState(GL_VERTEX_ARRAY);
- ////glVertexPointer(3, GL_FLOAT, sizeof(MyVertex), BUFFER_OFFSET(0)); //The starting point of the VBO, for the vertices
- ////
- ////glEnableClientState(GL_COLOR_ARRAY);
- ////glColorPointer(3, GL_FLOAT, sizeof(MyVertex), BUFFER_OFFSET(12));
- ////glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IndexVBOID);
- //////To render, we can either use glDrawElements or glDrawRangeElements
- //////The is the number of indices. 3 indices needed to make a single triangle
- ////glDrawElements(GL_QUADS, 4, GL_UNSIGNED_SHORT, BUFFER_OFFSET(0)); //The starting point of the IBO
- renderer->EndScene();
- // ----------- End Scene -------------
- GetDevice()->GetMainWindow()->Update();
- GetDevice()->GetMainWindow()->SetTitle(Str(renderer->GetFPS()).c_str());
- }
- //glDeleteBuffers(1, &VertexVBOID);
- //glDeleteBuffers(1, &IndexVBOID);
- //delete testImg;
- device->Shutdown();
- //delete testImg;
- return 0;
- }
- void DrawAxis() {
- glBegin(GL_LINES);
- glColor3f(1, 0, 0);
- glVertex3f(0, 0, 0);
- glVertex3f(1, 0, 0);
- glColor3f(0, 1, 0);
- glVertex3f(0, 0, 0);
- glVertex3f(0, 1, 0);
- glColor3f(0, 0, 1);
- glVertex3f(0, 0, 0);
- glVertex3f(0, 0, 1);
- glEnd();
- }
- void DrawGrid(float xStart, float zStart, float xStep, float zStep) {
- glColor3f(.5f, .5f, .5f);
- const unsigned int steps = 128;
- for (unsigned int i = 0; i <= steps; i++) {
- glBegin(GL_LINES);
- glVertex3f(xStart + xStep * (float)i, -1.0f, zStart);
- glVertex3f(xStart + xStep * (float)i, -1.0f, zStart-steps*zStep);
- glEnd();
- glBegin(GL_LINES);
- glVertex3f(xStart, -1.0f, zStart - zStep * (float)i);
- glVertex3f(xStart+steps*xStep, -1.0f, zStart - zStep * (float)i);
- glEnd();
- }
- }
- void DrawWiredCube(float x, float y, float z) {
- glColor3f(.5f, .5f, .5f);
- glBegin(GL_LINES);
- glVertex3f(x, y, z);
- glVertex3f(x, y, z - CubeSize);
- glVertex3f(x + CubeSize, y, z);
- glVertex3f(x + CubeSize, y, z - CubeSize);
- glVertex3f(x, y + CubeSize, z);
- glVertex3f(x, y + CubeSize, z - CubeSize);
- glVertex3f(x + CubeSize, y + CubeSize, z);
- glVertex3f(x + CubeSize, y + CubeSize, z - CubeSize);
- glVertex3f(x , y, z);
- glVertex3f(x + CubeSize, y, z);
- glVertex3f(x , y, z - CubeSize);
- glVertex3f(x + CubeSize, y, z - CubeSize);
- glVertex3f(x , y + CubeSize , z);
- glVertex3f(x + CubeSize, y + CubeSize , z);
- glVertex3f(x , y + CubeSize , z - CubeSize);
- glVertex3f(x + CubeSize, y + CubeSize , z - CubeSize);
- glVertex3f(x, y , z);
- glVertex3f(x, y + CubeSize, z);
- glVertex3f(x + CubeSize, y , z);
- glVertex3f(x + CubeSize, y + CubeSize, z);
- glVertex3f(x, y , z - CubeSize);
- glVertex3f(x, y + CubeSize, z - CubeSize);
- glVertex3f(x + CubeSize, y , z - CubeSize);
- glVertex3f(x + CubeSize, y + CubeSize, z - CubeSize);
- glEnd();
- }
- void DrawCube(float x, float y, float z) {
- glBegin(GL_QUADS);
-
- //top
- glColor3f(.3f, .0f, .0f);
- glVertex3f(x , y + CubeSize, z);
- glColor3f(.25f, .0f, .0f);
- glVertex3f(x + CubeSize, y + CubeSize, z);
- glColor3f(.3f, .0f, .0f);
- glVertex3f(x + CubeSize, y + CubeSize, z - CubeSize);
- glColor3f(.25f, .0f, .0f);
- glVertex3f(x , y + CubeSize, z - CubeSize);
- //bottom
- glColor3f(.0f, .0f, .3f);
- glVertex3f(x , y, z);
- glColor3f(.0f, .0f, .25f);
- glVertex3f(x , y, z - CubeSize);
- glColor3f(.0f, .0f, .3f);
- glVertex3f(x + CubeSize, y, z - CubeSize);
- glColor3f(.0f, .0f, .25f);
- glVertex3f(x + CubeSize, y, z);
- //left
- glColor3f(.0f, .0f, .3f);
- glVertex3f(x, y , z);
- glColor3f(.0f, .0f, .25f);
- glVertex3f(x, y + CubeSize, z);
- glColor3f(.0f, .0f, .3f);
- glVertex3f(x, y + CubeSize, z - CubeSize);
- glColor3f(.0f, .0f, .25f);
- glVertex3f(x, y , z - CubeSize);
- //right
- glColor3f(.0f, .0f, .3f);
- glVertex3f(x + CubeSize, y , z);
- glColor3f(.0f, .0f, .25f);
- glVertex3f(x + CubeSize, y , z - CubeSize);
- glColor3f(.0f, .0f, .3f);
- glVertex3f(x + CubeSize, y + CubeSize, z - CubeSize);
- glColor3f(.0f, .0f, .25f);
- glVertex3f(x + CubeSize, y + CubeSize, z);
- //front
- glColor3f(.0f, .0f, .3f);
- glVertex3f(x , y , z);
- glColor3f(.0f, .0f, .25f);
- glVertex3f(x + CubeSize, y , z);
- glColor3f(.0f, .0f, .3f);
- glVertex3f(x + CubeSize, y + CubeSize, z);
- glColor3f(.0f, .0f, .25f);
- glVertex3f(x , y + CubeSize, z);
- //back
- glColor3f(.0f, .0f, .3f);
- glVertex3f(x , y , z - CubeSize);
- glColor3f(.0f, .0f, .25f);
- glVertex3f(x , y + CubeSize, z - CubeSize);
- glColor3f(.0f, .0f, .3f);
- glVertex3f(x + CubeSize, y + CubeSize, z - CubeSize);
- glColor3f(.0f, .0f, .25f);
- glVertex3f(x + CubeSize, y , z - CubeSize);
- glEnd();
- }
- void DrawVoxelGrid(float xStart, float yStart, float zStart, float xStep, float yStep, float zStep) {
- glColor3f(.5f, .5f, .5f);
- const unsigned int steps = 16;
- glBegin(GL_LINES);
- for (unsigned int i = 0; i <= steps; i++) {
-
- for(unsigned int j = 0; j <= steps; j++) {
- glVertex3f(xStart + xStep * (float)i, j * yStep, zStart);
- glVertex3f(xStart + xStep * (float)i, j * yStep, zStart-steps*zStep);
- glVertex3f(xStart + xStep * (float)j, yStart, zStart - zStep * (float)i);
- glVertex3f(xStart + xStep * (float)j, yStart+steps*yStep, zStart - zStep * (float)i);
- glVertex3f(xStart, j * yStep, zStart - zStep * (float)i);
- glVertex3f(xStart+steps*xStep, j * yStep, zStart - zStep * (float)i);
- }
-
- }
- glEnd();
- }
|