Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

28.01.2007, 13:02

3d Spiel mit OpenGL programmieren

Hallo alle,
kann jemand mir vielleicht helfen? ich versuche Dame-spiel zu programmieren! wie kann ich erst diese brett (8*8) in Hell und dunkel machen? und wie kann ich nachher die objekte drauf einsetzen?
hier ist mein Code aber ist nicht vollständig!

#include <GL/glut.h> //GLUT .h-Datei, lädt auch GL .h-Dateien
#include <gl\gl.h>
#include <iostream.h>
#include "Wuerfel.h"

float fRotation = -45.0;// fRotation globaler variable
void Animate(int value)
{

fRotation = fRotation - 1.0;
if (fRotation <= 0.0)
{
fRotation = 5.0;
}
glutPostRedisplay();
glutTimerFunc(50,Animate,0);
}

void RenderScene(void)
{
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
glOrtho( -2., 2., -2, +2, -2., 2.);
gluLookAt(0.,1., 1.,0.,0,0,0,1.,0);
//gluLookAt(0.,1., 0.,0.,0,0,0,0.,-1); von Open
//gluLookAt(0.,1., -0.1,0.,8,8,0,1.,0); Open schräg
glScalef(0.5,0.5,0.5);

for(int i = 1; i < 10; i++) {

glPushMatrix(); //Matrix wird auf den Stack gesichert
//glRotatef(fRotation,0, 0., 1);
glTranslatef( 2.0, 0., 0.); //T3
glScalef(0.5, 1.0, 0.); //S2
Wuerfel(1.0);
glPopMatrix(); //Matrix wird wieder aktiviert

}


//glRotatef(fRotation,0, 1., 0);
/*glPushMatrix(); //Matrix wird auf den Stack gesichert
//glRotatef(fRotation,0, 0., 1);
glTranslatef( 1.75, 0., 0.); //T3
glScalef(0.5, 0.25, 1.); //S2
glScalef(0.2, 0.15, 0.5); //S2
Wuerfel(1.5);
glPopMatrix(); //Matrix wird wieder aktiviert*/


glutSwapBuffers();
glFlush();
}

int main(int argc, char **argv)
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH );
glutCreateWindow("OpenGL Aufgabe");
glEnable(GL_DEPTH_TEST);
glutDisplayFunc( RenderScene );
glutTimerFunc(50,Animate,0);

glutMainLoop();
return 0;
}

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

28.01.2007, 13:27

Bitte nächstes mal Codetags verwenden:

Quellcode

1
[cpp]Dein Code[/cpp]


Ansonsten beschreib nochmal genauer dein Problem... zu Hell / Dunkel fällt mir momentan ein: Textur oder direkt die Quadrate auf dem Spielfeld einfärben. Hab aber noch nicht mit GLUT gearbeitet, deswegen weiß ich grad nicht, was das genaue Problem ist.

3

28.01.2007, 14:29

Solange das Brett 2D sein kann, kannst du auch Tiles benutzen.
Sprachen: C/C++, C#, Assembler (16-Bit), QuickBASIC

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

4

28.01.2007, 20:33

mit nem array!
zur vorgehensweise hier ein bisschen code(ich weiß dass er schrecklich ist ;) )

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
struct STile
{
Vec3 v1;
Vec3 v2;
Vec3 v3;
Vec3 v4;
Col Color;
};

int array[8][8];

for(int y=0;y<8;y++)
{
for(int x_1=0;x_1+2<=8;x_1+=2)
{
array[x_1][y]=0;
}
for(int x_2=1;x_2+2<=8;x_2+=2)
{
array[x_2][y]=1;
}
}




STile Tiles[8][8];

for(int y=0;y<8;y++)
{
for(int x=0;x<8;x++)
{
Tiles[x][y].v1=Vec3(x,y);
Tiles[x][y].v2=Vec3(x+1,y);
Tiles[x][y].v3=Vec3(x+1,y+1);
Tiles[x][y].v4=Vec3(x,y+1);
Tiles[x][y].Color=Col(array[x][y]);
}
}

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

5

12.02.2007, 21:43

man könnte es ja wie folgt machen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// du solltest eine displaylist einer kachel haben,

// aus der dein spielfeld besteht:

// g_uiTile

// außerdem brauchst du die seitenlänge einer kachel

// am besten ist die kachel quadratisch

// ich gehe im folgenden von einer seitenlänge von 1 aus

// das spielfeld ist 8*8 felder groß



GLubyte aubColor[3]; // müsste man nicht ^^

int         c;

for(unsigned int i = 0; i < 8; i++)
{
     for(unsigned int j = 0; j < 8; j++)
     {
           c = ((((i&0x8) == 0) ^ ((j&0x8)) == 0)) * 255;
           aubColor[0] = (GLubyte) c;
           aubColor[1] = (GLubyte) c;
           aubColor[2] = (GLubyte) c;
           glColor3ub(aubColor);  
           glLoadIdentity();
           glTranslatef((GLfloat) i, (GLfloat) j, 0.0f);
           glCallList(g_uiTile);        
     }
}


so, oder so ähnlich :)

Werbeanzeige