Børre Stenseth
Å tegne:>Landsby

Landsby

Hva
headimage
Et skjelett for å bebygge en landsby med individuelle tomter

Hensikten er å demonstrere et enkelt eksempel på hvordan en scene kan settes sammen med mange forskjellige objekter. Rammeveket kan lett modifiseres og tilpasses andre settinger enn den som er brukt her: Bygninger i en landsby.

OpenGL støtter ikke noe spesielt filformat og støtter heller ikke noen mekanisme for å lage og beskrive geometriske objekter. Her introduseres en uhyre enkel mekanisme for å importere klasser som skal beskrive gjenstander i en scene. Modulen beskriver et minimalistisk sett regler for poduksjon av slike klasser. Applikasjonen bygges ved å importere kildefiler og rekompilere, eventuelt ved å linke inn ferdigkompilerte klasser.

Problembeskrivelse

Temaet er en landsby bestående av tomter med veier mellom. På tomtene kan det være parker, hus av ulik art, skulpturer eller andre ting som med rimelig romslighet kan høre hjemme i en landsby.

Vi ønsker å lage en struktur som gjør det enkelt å lage og inkorporere nye slike enheter i en struktur som tegner ut landsbyplaner med valgfrie enheter og valgfri plassering av enhetene.

Hver enhet er tildelt en bokstav, og vi lager en landsbyplan rett og slett ved å skrive inn en tekst. Du kan laste ned og kjøre en demonstrasjon: village03.exe.

Programstruktur

Oppgaven lar seg løse på et utall forskjellige måter. For å forenkle innsamlingen av tomtescener, kalt hus i fortsettelsen, må vi ha noen kjøreregler. De er i all enkelhet slik: Alle hustyper skal beskrives i en klasse som identifiseres med en bokstav. F.eks. hus assosiert med bokstaven f skal implementeres i klassen fHouse og skal distribueres på filene fhouse.h og fhouse.cpp. Alle slike husklasser skal avledes av klassen house.

Hver tomt har et areal på HX x HY, og veier har bredden ROAD. Veier opptrer ved linjeskift og som bredden på space (tomme tomter mellom hus).

Headerfila for house er slik:

house.h

//----------------------------------
// base class for houses
// Functionality:
//  Draw - complete OGL draw of the house
//  DrawOutline - simple fast OGL-draw
//                used during movement
// PickAction - may be used for inteactive
//              respons when selected
// Members:
//  origo_X,origo_Y where the ground for
//                  this house is locted
// a house has at its disposal HX x HY meters (20 x 20)
// b.stenseth nov 2000

#if !defined(BASE_HOUSE)
#define BASE_HOUSE

#include "stdafx.h"
class house : public CObject
{

public:
	house();
	house(GLfloat x,GLfloat y);
	~house();

	DECLARE_DYNCREATE(house);

	GLfloat origo_X;
	GLfloat origo_Y;


	virtual void DrawOutline();
	virtual void Draw();
	virtual BOOL PickAction();

};
#endif // !defined(BASE_HOUSE)

Prosjektet

Du kan laste ned VC++ prosjektet village (se ref), unzippe det og åpne det i Visual Studio. Du kan bruke dette prosjektet både til å utvikle dine egne bidrag og til å teste andres. Her vil du finne følgende klasser:

CMainFrame Dette er standard klassen som tar seg av hovedvinduet i en MFC-applikasjon. Du trenger ikke editere denne.
CVillageApp Dette er selve applikasjonen og meldingspumpa. Du trenger ikke editere denne.
CVillageDoc Dette er dokument klassen som tar seg av filhåndtering. Du kan kikke på denne dersom du ønsker at programmet skal kunne skrive/lese landsbyfiler til/fra disk, vilket er en naturlig utvidelse av programmets funksjonalitet. Du trenger ikke editere denne.
CVillageView Dette er klassen som tar seg av framvisning. I Village er denne avledet av CFormView slik at vi kan handtere tekstfeltet og knappen på en enkel måte. Du vil editere denne dersom du vil legge til yterligere funksjonalitet. Du trenger ikke editere denne.
COGLWnd Dette er en klasse som jeg har skrevet for å introdusere koplingen til OpenGL. Du trenger ikke editere denne, men det kan være lurt å inspisere den.
CMyScene Dette er klassen som handterer landsbyen. Denne må du forstå og endre.
house Dette er basisklassen for alle husklasser, dine egne og andres. Denne må du ikke editere.
aHouse Dette er et minimumsbidrag til landsbyen som belegger bokstaven a.
NOHouse Dette er det huset som vises når det skrives inn en bokstav som det ikke er definert noen klasse for. Det er lurt å beholde denne, men den kan editeres.

I tillegg må du altså lage dine nHouse-klasser avledet av house, der n er en eller annen bokstav.

village2001

Referanser

Prosjektet er brukt som laboratorieøvelse i et kurs for 3.klasse dataingeniørstudenter 2001 og 2002.

  • Exe-fil som samler opp bidragene fra 2001, 2002 og 2003: village03.exe
  • Selve skjelettet uten andre hus enn for a er tilgjengelig som zippet VC++ prosjekt: village.zip(VC++/gml)
    village.zip(VC++/.Net)
Vedlikehold
Børre Stenseth 2002
Egenkontroll
(Velkommen) Å tegne:>Landsby (Flaske)