21package com.jogamp.opengl.demos;
23import java.nio.FloatBuffer;
25import com.jogamp.opengl.GL;
27import com.jogamp.common.nio.Buffers;
28import com.jogamp.opengl.util.GLArrayDataServer;
35 public static final FloatBuffer
red = Buffers.newDirectFloatBuffer(
new float[] { 0.8f, 0.1f, 0.0f, 0.7f } );
36 public static final FloatBuffer
green = Buffers.newDirectFloatBuffer(
new float[] { 0.0f, 0.8f, 0.2f, 0.7f } );
37 public static final FloatBuffer
blue = Buffers.newDirectFloatBuffer(
new float[] { 0.2f, 0.2f, 1.0f, 0.7f } );
38 public static final float M_PI = (float)Math.PI;
52 public abstract void draw(
GL gl,
float x,
float y,
float angle);
116 final boolean useMappedBuffers,
118 final float inner_radius,
119 final float outer_radius,
120 final float width,
final int teeth,
final float tooth_depth,
final boolean validateBuffers)
122 final float dz = width * 0.5f;
127 final float s[] =
new float[5];
128 final float c[] =
new float[5];
129 final float normal[] =
new float[3];
133 this.isShared =
false;
137 r1 = outer_radius - tooth_depth / 2.0f;
138 r2 = outer_radius + tooth_depth / 2.0f;
140 da = 2.0f * (float) Math.PI / teeth / 4.0f;
160 if( useMappedBuffers ) {
169 for (i = 0; i < teeth; i++) {
170 angle = i * 2.0f *
M_PI / teeth;
171 sincos(angle + da * 0f, s, 0, c, 0);
172 sincos(angle + da * 1f, s, 1, c, 1);
173 sincos(angle + da * 2f, s, 2, c, 2);
174 sincos(angle + da * 3f, s, 3, c, 3);
182 vert(
frontFace, r0 * c[0], r0 * s[0], dz, normal);
183 vert(
frontFace, r1 * c[0], r1 * s[0], dz, normal);
184 vert(
frontFace, r0 * c[0], r0 * s[0], dz, normal);
185 vert(
frontFace, r1 * c[3], r1 * s[3], dz, normal);
188 vert(
frontSide, r1 * c[0], r1 * s[0], dz, normal);
189 vert(
frontSide, r2 * c[1], r2 * s[1], dz, normal);
190 vert(
frontSide, r2 * c[2], r2 * s[2], dz, normal);
191 vert(
frontSide, r1 * c[0], r1 * s[0], dz, normal);
192 vert(
frontSide, r2 * c[2], r2 * s[2], dz, normal);
193 vert(
frontSide, r1 * c[3], r1 * s[3], dz, normal);
201 vert(
backFace, r1 * c[0], r1 * s[0], -dz, normal);
202 vert(
backFace, r0 * c[0], r0 * s[0], -dz, normal);
203 vert(
backFace, r1 * c[3], r1 * s[3], -dz, normal);
204 vert(
backFace, r0 * c[0], r0 * s[0], -dz, normal);
207 vert(
backSide, r1 * c[3], r1 * s[3], -dz, normal);
208 vert(
backSide, r2 * c[2], r2 * s[2], -dz, normal);
209 vert(
backSide, r2 * c[1], r2 * s[1], -dz, normal);
210 vert(
backSide, r1 * c[3], r1 * s[3], -dz, normal);
211 vert(
backSide, r2 * c[1], r2 * s[1], -dz, normal);
212 vert(
backSide, r1 * c[0], r1 * s[0], -dz, normal);
215 u = r2 * c[1] - r1 * c[0];
216 v = r2 * s[1] - r1 * s[0];
217 len = (float)Math.sqrt(u * u + v * v);
224 vert(
outwardFace, r1 * c[0], r1 * s[0], dz, normal);
225 vert(
outwardFace, r1 * c[0], r1 * s[0], -dz, normal);
226 vert(
outwardFace, r2 * c[1], r2 * s[1], dz, normal);
227 vert(
outwardFace, r2 * c[1], r2 * s[1], -dz, normal);
231 vert(
outwardFace, r2 * c[1], r2 * s[1], dz, normal);
232 vert(
outwardFace, r2 * c[1], r2 * s[1], -dz, normal);
233 vert(
outwardFace, r2 * c[2], r2 * s[2], dz, normal);
234 vert(
outwardFace, r2 * c[2], r2 * s[2], -dz, normal);
236 normal[0] = ( r1 * s[3] - r2 * s[2] );
237 normal[1] = ( r1 * c[3] - r2 * c[2] ) * -1.0f ;
238 vert(
outwardFace, r2 * c[2], r2 * s[2], dz, normal);
239 vert(
outwardFace, r2 * c[2], r2 * s[2], -dz, normal);
240 vert(
outwardFace, r1 * c[3], r1 * s[3], dz, normal);
241 vert(
outwardFace, r1 * c[3], r1 * s[3], -dz, normal);
245 vert(
outwardFace, r1 * c[3], r1 * s[3], dz, normal);
246 vert(
outwardFace, r1 * c[3], r1 * s[3], -dz, normal);
247 vert(
outwardFace, r1 * c[0], r1 * s[0], dz, normal);
248 vert(
outwardFace, r1 * c[0], r1 * s[0], -dz, normal);
251 normal[0] = c[0] * -1.0f;
252 normal[1] = s[0] * -1.0f;
261 vert(
frontFace, r0 * c[4], r0 * s[4], dz, normal);
262 vert(
frontFace, r1 * c[4], r1 * s[4], dz, normal);
267 vert(
backFace, r1 * c[4], r1 * s[4], -dz, normal);
268 vert(
backFace, r0 * c[4], r0 * s[4], -dz, normal);
275 sincos(da * 1f, s, 1, c, 1);
276 u = r2 * c[1] - r1 * c[4];
277 v = r2 * s[1] - r1 * s[4];
278 len = (float)Math.sqrt(u * u + v * v);
284 vert(
outwardFace, r1 * c[4], r1 * s[4], dz, normal);
285 vert(
outwardFace, r1 * c[4], r1 * s[4], -dz, normal);
289 normal[0] = c[4] * -1.0f;
290 normal[1] = s[4] * -1.0f;
296 if( useMappedBuffers ) {
320 return "GearsObj[0x"+Integer.toHexString(hashCode())+
", vbo ff "+ffVBO+
", fs "+fsVBO+
", bf "+bfVBO+
", bs "+bsVBO+
"]";
323 static void vert(
final GLArrayDataServer array,
final float x,
final float y,
final float z,
final float n[]) {
332 static void sincos(
final float x,
final float sin[],
final int sinIdx,
final float cos[],
final int cosIdx) {
333 sin[sinIdx] = (float) Math.sin(x);
334 cos[cosIdx] = (float) Math.cos(x);
static final FloatBuffer green
GearsObject(final GearsObject shared)
void destroy(final GL gl)
static final FloatBuffer red
GLArrayDataServer outwardFace
GLArrayDataServer frontFace
GLArrayDataServer backFace
GLArrayDataServer insideRadiusCyl
abstract void draw(GL gl, float x, float y, float angle)
abstract GLArrayDataServer createInterleaved(boolean useMappedBuffers, int comps, int dataType, boolean normalized, int initialSize, int vboUsage)
abstract void addInterleavedVertexAndNormalArrays(GLArrayDataServer array, int components)
GLArrayDataServer backSide
final FloatBuffer gearColor
static final FloatBuffer blue
GLArrayDataServer frontSide
GearsObject(final GL gl, final boolean useMappedBuffers, final FloatBuffer gearColor, final float inner_radius, final float outer_radius, final float width, final int teeth, final float tooth_depth, final boolean validateBuffers)
void seal(final GL gl, final boolean seal)
Convenience method calling seal(boolean) and enableBuffer(GL, boolean).
void enableBuffer(final GL gl, final boolean enable)
Enables the buffer if enable is true, and transfers the data if required.
final void setInterleavedOffset(final int interleavedOffset)
void unmapStorage(final GL gl)
GLBufferStorage mapStorage(final GL gl, final int access)
void destroy(final GL gl)
final int getVBOName()
The VBO name or 0 if not a VBO.
static final int GL_STATIC_DRAW
GL_VERSION_1_5, GL_ES_VERSION_2_0, GL_VERSION_ES_1_0, GL_ARB_vertex_buffer_object Alias for: GL_STATI...
static final int GL_FLOAT
GL_ES_VERSION_2_0, GL_VERSION_1_1, GL_VERSION_1_0, GL_VERSION_ES_1_0 Define "GL_FLOAT" with expressio...
static final int GL_WRITE_ONLY
GL_VERSION_1_5, GL_ES_VERSION_3_1, GL_OES_mapbuffer, GL_ARB_vertex_buffer_object Alias for: GL_WRITE_...