Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
03.03.2002, 18:07
[RMen]OneStone



Hi, ich hab mal einen Screenshot aus meiner Vazte OpenGL Engine gemacht.
Wie findet ihr sie? Screen Shot 1 / 2

Wenns nen Admin stört, das ich das in diesem Forum poste, plz move.

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/


Dieser Beitrag wurde am 03.03.2002 um 18:19 von [RMen]OneStone bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
03.03.2002, 18:09
m.a.b.b.b



nunja es ist ein würfel mit texturen...warum sehen die farben so komisch uas?

--

-=B.L.Ä.N.D.E.R=-

zum Seitenanfang zum Seitenende Profil || Suche
002
03.03.2002, 18:15
[RMen]OneStone



Fog...

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
003
03.03.2002, 18:17
Prefect



Wieviele Zeilen Code sind anders als im entsprechenden NeHe-Tutorial?

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
004
03.03.2002, 18:24
[RMen]OneStone



*g* Viele, hab das in Klassen gemacht.

engine.cpp
Quellcode:#include "engine.h"
#include "util.h"

globalvars_t *g_pGlobals;

CEngine::CEngine(char *szTitle, int iWidth, int iHeight, int iBits, bool fFullScreen, WNDPROC fnWndProc)
{
m_fDraw = true;
m_fFullScreen = fFullScreen;
m_iBits = iBits;

m_iWidth = iWidth;
m_iHeight = iHeight;

m_fInitSuccessful = true;

int iPixelFormat;

{
WNDCLASS wcWindowClass;

wcWindowClass.cbClsExtra = 0;
wcWindowClass.cbWndExtra = 0;

wcWindowClass.hbrBackground = NULL;
wcWindowClass.hCursor = LoadCursor(NULL, IDC_ARROW);
wcWindowClass.hIcon = LoadIcon(NULL, IDI_WINLOGO);

wcWindowClass.hInstance = GetModuleHandle(NULL);
wcWindowClass.lpfnWndProc = fnWndProc;

wcWindowClass.lpszClassName = WND_CLASS_NAME;
wcWindowClass.lpszMenuName = 0;

wcWindowClass.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC;

if(!RegisterClass(&wcWindowClass))
{
m_fInitSuccessful = false;
return;
}
}

if(fFullScreen)
{
DEVMODE dmMode;
memset(&dmMode, 0, sizeof(DEVMODE));

dmMode.dmSize = sizeof(DEVMODE);
dmMode.dmBitsPerPel = iBits;
dmMode.dmPelsWidth = m_iWidth;
dmMode.dmPelsHeight = m_iHeight;
dmMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;

if(ChangeDisplaySettings(&dmMode, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
{
m_fInitSuccessful = false;
return;
}
}

if(!(m_hWnd = CreateWindowEx(0, WND_CLASS_NAME, szTitle, WS_POPUP, 0, 0, m_iWidth, m_iHeight, NULL, NULL, GetModuleHandle(NULL), NULL)))
{
ChangeDisplaySettings(NULL, 0);
m_fInitSuccessful = false;

return;
}

static PIXELFORMATDESCRIPTOR pfdFormat =
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
iBits,
0, 0, 0, 0, 0, 0,
0,
0,
0,
0, 0, 0, 0,
16,
0,
0,
PFD_MAIN_PLANE,
0,
0, 0, 0
};

if(!(m_hDC = GetDC(m_hWnd)))
{
ChangeDisplaySettings(NULL, 0);
m_fInitSuccessful = false;

return;
}

if(!(iPixelFormat = ChoosePixelFormat(m_hDC, &pfdFormat)))
{
ChangeDisplaySettings(NULL, 0);
m_fInitSuccessful = false;

return;
}

if(!SetPixelFormat(m_hDC, iPixelFormat, &pfdFormat))
{
ChangeDisplaySettings(NULL, 0);
m_fInitSuccessful = false;

return;
}

if(!(m_hRC = wglCreateContext(m_hDC)))
{
ChangeDisplaySettings(NULL, 0);
m_fInitSuccessful = false;

return;
}

if(!wglMakeCurrent(m_hDC, m_hRC))
{
ChangeDisplaySettings(NULL, 0);
m_fInitSuccessful = false;

return;
}

ShowWindow(m_hWnd, SW_SHOW);
SetForegroundWindow(m_hWnd);
SetFocus(m_hWnd);
ShowCursor(!fFullScreen);
Resize(m_iWidth, m_iHeight);

// Init OpenGL
{
float flFogColor[4] = { 0.5f, 0.5f, 0.5f, 1.0f };

glFogi(GL_FOG_MODE, GL_LINEAR);
glFogfv(GL_FOG_COLOR, flFogColor);
glFogf(GL_FOG_DENSITY, 0.35f);
glHint(GL_FOG_HINT, GL_NICEST);
glFogf(GL_FOG_START, .1f);
glFogf(GL_FOG_END, 15.0f);

glShadeModel(GL_SMOOTH);
glClearColor(0.5f, 0.5f, 0.5f, 1.5f);

glClearDepth(1.0f);

glEnable(GL_DEPTH_TEST);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_TEXTURE_2D);
glEnable(GL_FOG);

glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
}

for(int i = 0; i < 256; i++)
m_pfKeys[i] = false;

if(!(g_pGlobals = (globalvars_t*) malloc(sizeof(globalvars_t))))
{
m_fInitSuccessful = false;
return;
}

if(!LoadTextures())
{
MessageBox(m_hWnd, "Could not load Textures!", "Vazte", MB_ICONEXCLAMATION);
m_fInitSuccessful = false;

return;
}

if(!BuildFont())
{
m_fInitSuccessful = false;
return;
}
}

CEngine::~CEngine()
{
if(m_fFullScreen)
{
ChangeDisplaySettings(NULL, 0);
ShowCursor(true);
}

if(m_hRC)
{
wglMakeCurrent(NULL, NULL);
wglDeleteContext(m_hRC);

m_hRC = 0;
}

if(m_hDC)
{
ReleaseDC(m_hWnd, m_hDC);
m_hDC = 0;
}

if(m_hWnd)
{
DestroyWindow(m_hWnd);
m_hWnd = 0;
}

UnregisterClass(WND_CLASS_NAME, m_hInstance);

if(g_pGlobals)
free((void*) g_pGlobals);

glDeleteLists(m_iFontBase, 96);
}

bool CEngine::LoadTextures()
{
m_phTextures = (UINT*) malloc(sizeof(UINT));

AUX_RGBImageRec *irData = UTIL_LoadBMPTexture("data\\crate.bmp");

if(!irData || !irData->data)
return false;

glGenTextures(1, &m_phTextures[0]);
glBindTexture(GL_TEXTURE_2D, m_phTextures[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, irData->sizeX, irData->sizeY, GL_RGB, GL_UNSIGNED_BYTE, irData->data);

free((void*) irData->data);
free((void*) irData);

irData = UTIL_LoadBMPTexture("data\\crate2.bmp");

if(!irData || !irData->data)
return false;

glGenTextures(1, &m_phTextures[1]);
glBindTexture(GL_TEXTURE_2D, m_phTextures[1]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, irData->sizeX, irData->sizeY, GL_RGB, GL_UNSIGNED_BYTE, irData->data);

free((void*) irData->data);
free((void*) irData);

return true;
}

bool CEngine::BuildFont()
{
m_iFontBase = glGenLists(96);

SelectObject(m_hDC, CreateFont(15, 0, 0, 0, 400, 0, 0, 0, ANSI_CHARSET, 0, 0, ANTIALIASED_QUALITY, FF_DONTCARE | DEFAULT_PITCH, "Tahoma"));
wglUseFontBitmaps(m_hDC, 32, 96, m_iFontBase);

return true;
}


void CEngine::Resize(int iWidth, int iHeight)
{
m_iWidth = (iWidth > 640 ? iWidth : 640);
m_iHeight = (iHeight > 480 ? iHeight : 480);

glViewport(0, 0, m_iWidth, m_iHeight);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluPerspective(45.0f, (float) m_iWidth / (float) m_iHeight, 0.1f, 25.0f);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

bool CEngine::Draw()
{
static float flYRotation = 30.0f;
static double dZPos = -5;
static bool fDirection = true;

time(&(g_pGlobals->time));

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

gluLookAt(0, 5, dZPos,
  0, 0, dZPos + 10,
  0, 1, 0);

glRotatef(flYRotation, .0f, 1.0f, .0f);

glColor3f(1.0f, 1.0f, 1.0f);
glBindTexture(GL_TEXTURE_2D, m_phTextures[0]);

glBegin(GL_QUADS);
{
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f); // Bottom Left Of The Texture and Quad
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f); // Bottom Right Of The Texture and Quad
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f); // Top Right Of The Texture and Quad
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f); // Top Left Of The Texture and Quad

glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // Bottom Right Of The Texture and Quad
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f); // Top Right Of The Texture and Quad
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f); // Top Left Of The Texture and Quad
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // Bottom Left Of The Texture and Quad

glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f); // Top Left Of The Texture and Quad
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,  1.0f,  1.0f); // Bottom Left Of The Texture and Quad
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,  1.0f,  1.0f); // Bottom Right Of The Texture and Quad
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f); // Top Right Of The Texture and Quad

glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // Top Right Of The Texture and Quad
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // Top Left Of The Texture and Quad
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f); // Bottom Left Of The Texture and Quad
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f); // Bottom Right Of The Texture and Quad
}
glEnd();

glBindTexture(GL_TEXTURE_2D, m_phTextures[1]);
glBegin(GL_QUADS);
{
glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, -1.0f); // Bottom Right Of The Texture and Quad
glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f,  1.0f, -1.0f); // Top Right Of The Texture and Quad
glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,  1.0f,  1.0f); // Top Left Of The Texture and Quad
glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, -1.0f,  1.0f); // Bottom Left Of The Texture and Quad

glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f); // Bottom Left Of The Texture and Quad
glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f,  1.0f); // Bottom Right Of The Texture and Quad
glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f,  1.0f,  1.0f); // Top Right Of The Texture and Quad
glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,  1.0f, -1.0f); // Top Left Of The Texture and Quad
}
glEnd();

if(m_pfKeys[VK_F2])
{
glBegin(GL_LINES);
{
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 0.0f, -35.0f);
glVertex3f(0.0f, 0.0f, 35.0f);

glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(-35.0f, 0.0f, 0.0f);
glVertex3f(35.0f, 0.0f, 0.0f);

glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(0.0f, 35.0f, 0.0f);
glVertex3f(0.0f, -35.0f, 0.0f);
}
glEnd();
}


glRasterPos2f(0.f, 3.0f);
PrintText("Printing Works fine!");

if(fDirection)
dZPos -= 0.05;
else
dZPos += 0.05;

if(dZPos <= -15 || dZPos >= -5)
fDirection = !fDirection;

//Handle Keys
{
if(m_pfKeys[VK_F1])
{
dZPos = -5;
fDirection = true;
}
}

return true;
}

bool CEngine::ChangeFullScreenMode(bool fFullScreen)
{
if(m_flNextFullScreenChange > g_pGlobals->time)
return false;

m_flNextFullScreenChange = g_pGlobals->time + 1.0f;

m_fFullScreen = fFullScreen;

if(!fFullScreen)
return (ChangeDisplaySettings(NULL, 0) == DISP_CHANGE_SUCCESSFUL);
else
{
DEVMODE dmMode;
memset(&dmMode, 0, sizeof(DEVMODE));

dmMode.dmSize = sizeof(DEVMODE);
dmMode.dmBitsPerPel = m_iBits;
dmMode.dmPelsWidth = m_iWidth;
dmMode.dmPelsHeight = m_iHeight;
dmMode.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;

return (ChangeDisplaySettings(&dmMode, CDS_FULLSCREEN) == DISP_CHANGE_SUCCESSFUL);
}
}


void CEngine::SwapBuff()
{
SwapBuffers(m_hDC);
}

HWND CEngine::GetHWND()
{
return m_hWnd;
}


void CEngine::KeyPress(unsigned int nKeyCode)
{
m_pfKeys[nKeyCode] = true;
}

void CEngine::KeyRelease(unsigned int nKeyCode)
{
m_pfKeys[nKeyCode] = false;
}

void CEngine::PrintText(const char *fmt, ...)
{
char text[256];
va_list ap;

if (fmt == NULL)
return;

va_start(ap, fmt);
    vsprintf(text, fmt, ap);
va_end(ap);

glPushAttrib(GL_LIST_BIT);
glListBase(m_iFontBase - 32);
glCallLists(strlen(text), GL_UNSIGNED_BYTE, text);
glPopAttrib();
}

engine.h
Quellcode:#include <windows.h>
#include <time.h>
#include <stdarg.h>

#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>

#define WND_CLASS_NAME "pixel-house|grafix|vazte.main-wnd"

#define MAX_TEXTURES 512

typedef struct globalvars_s
{
time_t time;
} globalvars_t;

class CEngine
{
private:
HDC m_hDC;
HGLRC m_hRC;
HWND m_hWnd;
HINSTANCE m_hInstance;

bool m_pfKeys[256];
bool m_fFullScreen;
bool m_fLighting;

int m_iWidth;
int m_iHeight;
int m_iBits;

int m_iFontBase;

float m_flNextFullScreenChange;

UINT *m_phTextures;

public:
bool m_fDraw;
bool m_fInitSuccessful;

CEngine(char *szTitle, int iWidth, int iHeight, int iBitsPerPixel, bool fFullScreen, WNDPROC fnWndProc);
~CEngine();

bool BuildFont();
bool LoadTextures();

void Resize(int iWidth, int iHeight);
bool Draw();

void KeyPress(unsigned int nKeyCode);
void KeyRelease(unsigned int nKeyCode);
void SwapBuff();

HWND GetHWND();
bool ChangeFullScreenMode(bool fFullScreen);

void PrintText(const char* szText, ...);
};

main.cpp
Quellcode:#include "engine.h"

CEngine *engEngine;

LONG WINAPI WndProc(HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam)
{
if(!engEngine)
return DefWindowProc(hWnd, nMsg, wParam, lParam);

switch(nMsg)
{
case WM_CLOSE:
case WM_QUIT:
PostQuitMessage(0);
return 0;

case WM_ACTIVATE:
engEngine->ChangeFullScreenMode(HIWORD(wParam) != WA_INACTIVE);
engEngine->m_fDraw = (HIWORD(wParam) != WA_INACTIVE);
return 0;

case WM_SYSCOMMAND:
if(wParam == SC_SCREENSAVE || wParam == SC_MONITORPOWER)
return false;
else
return DefWindowProc(hWnd, nMsg, wParam, lParam);

case WM_KEYDOWN:
engEngine->KeyPress(wParam);
return 0;

case WM_KEYUP:
if(wParam == VK_ESCAPE)
PostQuitMessage(0);
else
engEngine->KeyRelease(wParam);

return 0;

case WM_SIZE:
engEngine->Resize(LOWORD(lParam), HIWORD(lParam));
return 0;

default:
return DefWindowProc(hWnd, nMsg, wParam, lParam);
}
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char* szCommandLine, int nShowMode)
{
if(time(0) < 0)
return 0x0F;

engEngine = new CEngine("Vazte Test", 1024, 768, 32, true, WndProc);

if(!engEngine)
return 0xFE;

if(!engEngine->m_fInitSuccessful)
{
delete engEngine;
return 0xFF;
}

{
MSG msgMessage;

while(true)
{
if(PeekMessage(&msgMessage, engEngine->GetHWND(), 0, 0, PM_REMOVE))
{
if(msgMessage.message == WM_QUIT)
break;

TranslateMessage(&msgMessage);
DispatchMessage(&msgMessage);
}
else
{
if(engEngine->m_fDraw && !engEngine->Draw())
break;
else
engEngine->SwapBuff();
}
}
}

engEngine->~CEngine();
return 0;
}

util.cpp
Quellcode:#include "util.h"

AUX_RGBImageRec* UTIL_LoadBMPTexture(const char* szFileName)
{
FILE *p_hFile = 0;

if(!szFileName)
return 0;

if(p_hFile = fopen(szFileName, "r"))
{
fclose(p_hFile);
return auxDIBImageLoad(szFileName);
}

return 0;
}

bool UTIL_LoadTexture(const char* szName, unsigned int *iTexture)
{
AUX_RGBImageRec *irData = 0;

if(!(irData = UTIL_LoadBMPTexture(szName)))
return false;

glGenTextures(1, iTexture);
glBindTexture(GL_TEXTURE_2D, *iTexture);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, irData->sizeX, irData->sizeY, GL_RGB, GL_UNSIGNED_BYTE, irData->data);

free((void*) irData);
free((void*) irData->data);

return true;
}

util.h
Quellcode:#include <windows.h>
#include <stdio.h>

#include <gl\gl.h>
#include <gl\glu.h>
#include <gl\glaux.h>

AUX_RGBImageRec* UTIL_LoadBMPTexture(const char* szFileName);

Sorry, aber solchen Vorwürfen möchte ich mich nicht ausseten!
[/i]

[edit]Fuck, da hat er wohl irgend nen pArray[ i ] aus ner Schleife missverstanden ;)[/edit]

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/


Dieser Beitrag wurde am 03.03.2002 um 18:25 von [RMen]OneStone bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
005
03.03.2002, 22:49
NeW GoD



hi

naja ich finde die Screenshots sind noch zuwenig aufschlussreich....

Poste andere Screenshots :)

--

zum Seitenanfang zum Seitenende Profil || Suche
006
04.03.2002, 16:11
[RMen]OneStone



Was anderes kann sie noch nicht ;)

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
007
04.03.2002, 17:36
NeW GoD



hehe ok

poste bitte neue screenshots sobald sie en bissel mehr kann :)

--

zum Seitenanfang zum Seitenende Profil || Suche
008
04.03.2002, 18:40
Archangel



was is daran ne engine ?
ein hardcoded cube im nebel, waahnsinn..

desweiteren sind void * casts idiotisch, es sei denn du willst nen const wegcasten. und schon mal was von mehrfach-include-schutz bei header files gehört ?

und sowas:
free((void*) irData);
free((void*) irData->data);

ist einfach _lächerlich_

auch einen destructor manuell aufzurufen ist, in den meisten fällen, absoluter _quatsch_, das automatische aufrufen ist doch gerade der sinn des destructors..

ich zitier mal einfach prefect:

<Prefect> is ja süß was der engine nennt

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005


Dieser Beitrag wurde am 04.03.2002 um 18:44 von Archangel bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
009
05.03.2002, 14:42
[RMen]OneStone



Hmmm...
Man darf sich doch auch mal freuen!
Ausserdem muss ich 2 free's machen, da beim ersten die Struct gefreet wird und beim zweiten memory das von einem Pointer in der Struct benutzt wird. Ok, die Reiehenfolge ist falsch, aber jeder macht mal Fehler ;). Ausserdem musste das zu nem void* casten, sonst meckert VC++ 6.0 bei mir. Desweiteren würde der Konstruktor sonst nie aufgerufen, da engEngine ausserhalb der WinMain definiert wird. Bevor du das nächste mal meckerst, lies bitte erstmal was genauer.

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
010
05.03.2002, 14:53
Archangel



der destrutkor wird aber auch bei einem delete aufgerufen, von daher, warum deletest du engEngine nich ?

und dass vc meckert, wenn du nich nach void * castest, ist seeehr verwunderlich.. wie ist denn der compile error ?

--

Mar 01 01:10:13 <voice> jo
Mar 01 01:10:40 <voice> bis dann ^^
Mar 01 01:11:20 <Archangel> jo
**** ENDING LOGGING AT Tue Mar 1 01:58:13 2005


Dieser Beitrag wurde am 05.03.2002 um 14:54 von Archangel bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
011
05.03.2002, 17:19
[RMen]OneStone



Zu 1) Weil ich "delete xyz;" unschön finde, passt nicht zu C++ find' ich!
Zu 2) Kann nicht konvertiert werden bla bla... erforder Re-Interpret-Cast ...

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
012
05.03.2002, 17:27
blair



_bitte_ ? free is c, delete is cpp... lern coden...

und btw: wenn du delete nich magst...

Quellcode:
if(!engEngine->m_fInitSuccessful)
{
delete engEngine;
return 0xFF;
}

was soll das dann?

ich würde das mem leak mal beheben...

--

because our freedom sits at the end of a gun
we're all here getting beat up and held back
we're all here digging knives from our backs

zum Seitenanfang zum Seitenende Profil || Suche
013
05.03.2002, 17:28
Braindead



zu 1. das ist doch schwachsinn, in diesem fall jedenfalls und von deiner motivation her, dies zu tun.

--

zum Seitenanfang zum Seitenende Profil || Suche
014
06.03.2002, 15:20
[RMen]OneStone



Seit ihr eigentlich total beschränkt?
Warum sollte ich den Destruktor nicht manuel aufrufen? Es kommt aufs gleiche Raus! Ausserdem weiß ich das delete C++ ist, aber ich finde es passt zu Basic!
Wenn ich halt so coden will, das geht euch doch nix an! Ihr seltsamen Schwachmaten sucht doch nur irgend einen Grund die Arbeit eines 14-Jährigen, der sich über sein ersten OGL Proc freut, zu erniedrigen.

@ Admin: Bitte lösch diesen Thread!

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
015
06.03.2002, 16:04
Prefect



Harhar :)

Naja, verständlich, daß du auf Defensivposition gehst, aber es gibt Situationen, in denen sollte man seine Fehler einfach eingestehen. Schließlich lernt man so am besten - weiß ich aus eigener Erfahrung.

Natürlich _kannst_ du den Destruktur manuell aufrufen, aber du mußt den Speicherplatz dann auch freigeben. Mit anderen Worten, der Code müßte so aussehen:

pInstance->~destructor();
free_or_whatever(pInstance);

Ansonsten wird der Speicher _nicht_ freigegeben. Ach ja: free() kannst du dafür nicht verwenden, da new und malloc() evtl. unterschiedliche Heaps verwenden. Im Endeffekt wirst du also gezwungen, entweder delete zu verwenden oder new zu überladen. Auf beide Arten ist es aber Quatsch. Wenn dir delete nicht gefällt, programmier in C.

Übrigens ist es ja cool, sich über sein erstes OGL-Programm zu freuen. Ich habe mich auch über mein erstes OGL-Programm gefreut, auch wenn es nur ein drehendes Polygon gezeigt hat (ist gar nicht so lang her :}). Ich wäre aber nie so dreist gewesen, sowas "Engine" zu nennen.
Selbsteinschätzung ist eine schwierige Kunst, und kaum jemand beherrscht sie wirklich - ich mache da sicher auch Fehler. Ich hoffe einfach, du lernst aus dem Vorfall ;)

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
016
06.03.2002, 16:18
[RMen]OneStone



Ok, sorry. Vielleicht war ich etwas überheblich...
Übrigens: Danke für den Tipp mit delete usw.

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
017
07.03.2002, 16:29
[RMen]OneStone



Font Engine
Nicht um Gnomo zu beleidigen, sondern um mich in ein besseres Licht zu rücken ;).

--

georg-wicherski@pixel-house.net | http://www.pixel-house.net/ - Coding Resource| http://www.google.de/

zum Seitenanfang zum Seitenende Profil || Suche
018
08.03.2002, 20:15
Milho



Also ich bin ja nicht richtig vom Fach aber trotzdem glaub ich dass der Artikel von Flipcode eine nette definition von "Engine" gibt: http://www.flipcode.com/tutorials/tut_el_engine.shtml

Mahlzeit ;)

--

GA
d³sign

zum Seitenanfang zum Seitenende Profil || Suche
019
08.03.2002, 21:01
Retro



Erm, ohne mir dass mal durchgelesen zu haben =)

Hat es überhaupt einen Sinn eine Engine aus den HeNe-Tutorials aufzubauen? Ich denke dass ist nen falscher ansatz um ganze Levels zu rendern... fürs expirimentieren mit OpenGL usw.. zwar sehr schön =) aber ne ganze Engine?

Ich habe in GL nen kleinen renderer für eine Plastische darstellung von Mechanischen bauteilen geproggt, plus Shapeeditor etc... dafür haben die Tutorials ne gute grundlage gegeben. Aber nen ganzes Game bzw. Engine unterscheidet sich doch schon etwas von ein paar Polygonen ohne Textur und ohne Lighting etc...

Ich weiss nicht, sind die Tutorials über OpenGL denn nun wirklich nen _guter_ ansatz für eine Engine oder eher um Grundlagen über besagtes OpenGL zu lernen?

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
020
09.03.2002, 00:01
apfelkorn



Sie sind ein guter Ansatz um mehr über Render-Techniken und OGL zu lernen... wenn du eine richtige Engine coden willst, kannst du erstmal einige stunden damit verbringen, dir eine vernünftige aufteilung aller engine-komponenten nachzudenken, wie diese miteinander kommunizieren und welche komponente welchen teil übernimmt. So muss zum Beispiel das Hauptprogramm bei mir die reine Berechnung einer wirtuellen Welt übernehmen und sie in ein für den Render brauchbares Format pressen und ggf. dem Render Schritt-für-Schritt sagen, wo er jetzt ein Polygon zeichnen soll. Also z.B. Hast du deine virtuelle Welt, die Spielerposition und den Blickwinkel. Daraus berechnest du jetzt, was der Spieler sehen kann, was nicht und lässt den Renderer zeichnen, was der Spieler sehen kann (Der Renderer fungiert bei mir nur soz. als Interface zu den Grafik-API's wie OpenGL und DirectX) Ausserdem muss das Hauptprogramm für jeden Frame die Bewegungen von Objekten berechnen und auf deren Eigenschaften. Wie im RL halt, nur ohne das man was davon mitbekommt. Die virtuelle Welt ist es auch, die der Sound-Komponente einzelne Geräusche übergibt etc. Dann musst du über Eingabefilter sowohl für Dateien als auch für Benutzereingaben nachdenken.

Ich bin inzwischen soweit, das der bei mir ein einfaches-graues Windowsfenster aufbaut und Log-Dateien schreibt. Ausserdem wird die in eine DLL ausgelagerte R_Init Funktion aufgerufen und der Rückgabewert kontrolliert. Ich bin gerade dabei über einmal den Cos-Satz den Betrag eines Vektors aus zwei zu addierenden Vektoren und dann mit dem Sinus-Satz den Winkel des Summen-Vektors zu berechnen. Das System hat den Vorteil, das es sich relativ nah an der echten Physik aufhält und dadurch möglichst reale Ergebnisse produziert. Wenn man wirklich alles nach den Regeln der Kinetik und Mechanik beachtet, hat man eine niezuvor dagewesene realistische Simulation des echten Lebens, ohne das man davon wirklich was sieht, denn die Eingabe- und Ausgabefilter schreibt man immer zuletzt ;)

--

zum Seitenanfang zum Seitenende Profil || Suche
021
09.03.2002, 11:57
Damado



Ich glaube ich lerne C++ dann kann ich mit flamen

--

zum Seitenanfang zum Seitenende Profil || Suche
022
10.03.2002, 14:59
apfelkorn



wär zu überlegen :)

--

zum Seitenanfang zum Seitenende Profil || Suche
023
12.03.2002, 12:13
sth



*lol*
Ich möchte hier nicht irgendwelche Programmierstile bewerten (bin selbst ein schlechter Programmierer und grottenschlechter Mathematiker sowieso), aber hier ein umgeschriebenes Nehe-Tutorial mit einem hard-coded cube als ENGINE zu bezeichnen zeugt davon, dass sich jemand mal wieder überhaupt nicht über seine verwendete Sprache im Klaren ist.
Die GRUNDANFORDERUNG einer Engine(=Motor) ist doch, externe Daten verarbeiten zu können - oder hat dein Auto das Benzin schon im Motor mit eingebaut?
Sei dir erstmal über die von dir verwendeten Begriffe im Klaren - dann wird dich auch keiner von deiner Freude über dein erstes OGL-Prog abhalten!

Desweiteren: Den Source-Code hier zu posten ist völlig bescheuert - da geht man zu http://nehe.gamedev.net. Und deine C++-Conversion ist auch für'n Arsch, denn so ein simples Prog sollte man (IMHO) auch weiterhin simpel halten - also in C. (persönliche Meinung)
Desweiteren: Wayne! Ich könnte hier auch den Source-Code meiner Engine posten (150KB gezippt), aber das würde hier keinem was bringen, weil keiner hier irgendetwas damit anfangen können wird: DAS IST EIN FORUM! Das einzige was die Leute machen, ist, sich Stellen herauszusuchen und dich darauf aufmerksam zu machen, wie scheisse das doch ist. Also lass es und lerne. LERNE!

wohlgesonnen
sth

--

"Gotta admit that I'm a little bit confused
Sometimes it seems to me as if I'm just being used
Gotta stay awake, gotta try and shake off this creeping malaise
If I don't stand my own ground, how can I find my way out of this place" Pink Floyd - Dogs


Dieser Beitrag wurde am 12.03.2002 um 12:15 von sth bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
024
12.03.2002, 16:10
Onkel Dittmeyer



Ich will ja auch net meckern aber ne Engine is das noch lange net!
Das krieg ich auch mit nem env_fade hin
Kann ja nur mappen

--

zum Seitenanfang zum Seitenende Profil || Suche