xref: /haiku/src/apps/glteapot/GLObject.h (revision 552bd60c4bbb4ffb20de6b638d51875ca6e9ff28)
1c8c44fa0SJérôme Duval /*
2*552bd60cSAlexandre Deckner  * Copyright 2008 Haiku Inc. All rights reserved.
3*552bd60cSAlexandre Deckner  * Distributed under the terms of the MIT License.
4*552bd60cSAlexandre Deckner  *
5*552bd60cSAlexandre Deckner  * Authors:
6*552bd60cSAlexandre Deckner  *		Alexandre Deckner
7*552bd60cSAlexandre Deckner  *
8*552bd60cSAlexandre Deckner  */
9*552bd60cSAlexandre Deckner 
10*552bd60cSAlexandre Deckner /*
11*552bd60cSAlexandre Deckner  * Original Be Sample source modified to use a quaternion for the object's orientation
12*552bd60cSAlexandre Deckner  */
13*552bd60cSAlexandre Deckner 
14*552bd60cSAlexandre Deckner /*
15c8c44fa0SJérôme Duval 	Copyright 1999, Be Incorporated.   All Rights Reserved.
16c8c44fa0SJérôme Duval 	This file may be used under the terms of the Be Sample Code License.
17c8c44fa0SJérôme Duval */
18*552bd60cSAlexandre Deckner 
19be98a602SStefano Ceccherini #ifndef GL_OBJECT_H
20be98a602SStefano Ceccherini #define GL_OBJECT_H
21c8c44fa0SJérôme Duval 
22c8c44fa0SJérôme Duval #include "ObjectView.h"
23be98a602SStefano Ceccherini #include "util.h"
24*552bd60cSAlexandre Deckner #include "Quaternion.h"
25c8c44fa0SJérôme Duval 
26c8c44fa0SJérôme Duval struct point {
27c8c44fa0SJérôme Duval 	float x,y,z;
28c8c44fa0SJérôme Duval 	float nx,ny,nz;
29c8c44fa0SJérôme Duval 	float tu,tv;
30c8c44fa0SJérôme Duval };
31c8c44fa0SJérôme Duval 
32c8c44fa0SJérôme Duval struct tri {
33c8c44fa0SJérôme Duval 	int p1,p2,p3;
34c8c44fa0SJérôme Duval };
35c8c44fa0SJérôme Duval 
36c8c44fa0SJérôme Duval struct quadStrip {
37c8c44fa0SJérôme Duval 	int numpts;
38c8c44fa0SJérôme Duval 	int *pts;
39c8c44fa0SJérôme Duval };
40c8c44fa0SJérôme Duval 
41c8c44fa0SJérôme Duval 
42c8c44fa0SJérôme Duval class GLObject {
43c8c44fa0SJérôme Duval 	public:
44c8c44fa0SJérôme Duval 						GLObject(ObjectView* ov);
45c8c44fa0SJérôme Duval 		virtual			~GLObject();
46c8c44fa0SJérôme Duval 		virtual void	Draw(bool forID, float IDcolor[]);
47*552bd60cSAlexandre Deckner 
48c8c44fa0SJérôme Duval 		virtual bool	SpinIt();
49*552bd60cSAlexandre Deckner 		void			Spin(float rx, float ry);
50*552bd60cSAlexandre Deckner 		void 			RotateWorldSpace(float rx, float ry);
51c8c44fa0SJérôme Duval 		virtual void	MenuInvoked(BPoint point);
52c8c44fa0SJérôme Duval 		virtual void	DoDrawing(bool forID) {};
53*552bd60cSAlexandre Deckner 		int				Solidity() const;
54be98a602SStefano Ceccherini 
55be98a602SStefano Ceccherini 		float			x, y, z;
56*552bd60cSAlexandre Deckner 		Quaternion		fRotation;
57450bb3e5SStephan Aßmus 
58450bb3e5SStephan Aßmus 	protected:
59*552bd60cSAlexandre Deckner 
60*552bd60cSAlexandre Deckner 		float			spinX, spinY;
61*552bd60cSAlexandre Deckner 		int				solidity;
62450bb3e5SStephan Aßmus 		int				color;
63be98a602SStefano Ceccherini 		bool			changed;
64450bb3e5SStephan Aßmus 
65450bb3e5SStephan Aßmus 	private:
66450bb3e5SStephan Aßmus 		ObjectView*		fObjView;
67c8c44fa0SJérôme Duval };
68c8c44fa0SJérôme Duval 
69c8c44fa0SJérôme Duval class TriangleObject : public GLObject {
70c8c44fa0SJérôme Duval 	public:
71c8c44fa0SJérôme Duval 							TriangleObject(ObjectView* ov, char* filename);
72c8c44fa0SJérôme Duval 		virtual				~TriangleObject();
73c8c44fa0SJérôme Duval 		virtual void		DoDrawing(bool forID);
74be98a602SStefano Ceccherini 
75450bb3e5SStephan Aßmus 	private:
76450bb3e5SStephan Aßmus 		BufferArray<point>		fPoints;
77450bb3e5SStephan Aßmus 		BufferArray<tri>		fTriangles;
78450bb3e5SStephan Aßmus 		BufferArray<quadStrip>	fQs;
79c8c44fa0SJérôme Duval };
80be98a602SStefano Ceccherini 
81be98a602SStefano Ceccherini #endif // GL_OBJECT_H
82