} // only use this for rotation - position set by object data /// <summary> /// Constructor /// </summary> /// <param name="autoscale">To autoscale distance. Sets the 1.0 scale point.</param> /// <param name="autoscalemin">Minimum to scale to</param> /// <param name="autoscalemax">Maximum to scale to</param> /// <param name="useeyedistance">Use eye distance to lookat to autoscale, else use distance between object and eye</param> public GLPLVertexShaderModelTranslationTexture(float autoscale = 0, float autoscalemin = 0.1f, float autoscalemax = 3f, bool useeyedistance = true) { Transform = new GLRenderDataTranslationRotation(); CompileLink(ShaderType.VertexShader, Code(), auxname: GetType().Name, constvalues: new object[] { "autoscale", autoscale, "autoscalemin", autoscalemin, "autoscalemax", autoscalemax, "useeyedistance", useeyedistance }); }
} // only use this for rotation - position set by object data /// <summary> Constructor </summary> public GLPLVertexShaderModelCommonObjectColor() { Transform = new GLRenderDataTranslationRotation(); CompileLink(ShaderType.VertexShader, Code(), auxname: GetType().Name); }
protected override void OnLoad(EventArgs e) { base.OnLoad(e); Closed += ShaderTest_Closed; gl3dcontroller = new Controller3D(); gl3dcontroller.PaintObjects = ControllerDraw; gl3dcontroller.MatrixCalc.PerspectiveNearZDistance = 1f; gl3dcontroller.MatrixCalc.PerspectiveFarZDistance = 21000f; gl3dcontroller.MouseTranslateAmountAtZoom1PerPixel = 0.5f; gl3dcontroller.ZoomDistance = 50F; gl3dcontroller.Start(glwfc, new Vector3(0, 0, 0), new Vector3(135f, 0, 0f), 1F); bool useopenglcoords = true; // true for +Z towards viewer. OFC is using mostly +Z away from viewer if (useopenglcoords) { gl3dcontroller.MatrixCalc.ModelAxisPositiveZAwayFromViewer = false; gl3dcontroller.SetPositionCamera(new Vector3(0, 0, 0), new Vector3(0, 0, 100), 0f); gl3dcontroller.RecalcMatrices(); } gl3dcontroller.KeyboardTravelSpeed = (ms, eyedist) => { return((float)ms / 100.0f); }; // create stock shaders items.Add(new GLColorShaderWorld(), "COSW"); items.Add(new GLColorShaderObjectTranslation(), "COSOT"); items.Add(new GLTexturedShaderObjectTranslation(), "TEXOT"); // create stock textures items.Add(new GLTexture2D(Properties.Resources.dotted, SizedInternalFormat.Rgba8), "dotted"); items.Add(new GLTexture2D(Properties.Resources.dotted2, SizedInternalFormat.Rgba8), "dotted2"); items.Add(new GLTexture2D(Properties.Resources.Logo8bpp, SizedInternalFormat.Rgba8), "logo8bpp"); items.Add(new GLTexture2D(Properties.Resources.smile5300_256x256x8, SizedInternalFormat.Rgba8), "smile"); #region coloured lines if (true) { GLRenderState lines = GLRenderState.Lines(1); rObjects.Add(items.Shader("COSW"), GLRenderableItem.CreateVector4Color4(items, PrimitiveType.Lines, lines, GLShapeObjectFactory.CreateLines(new Vector3(-100, -0, -100), new Vector3(-100, -0, 100), new Vector3(10, 0, 0), 21), new Color4[] { Color.Red, Color.Red, Color.DarkRed, Color.DarkRed }) ); rObjects.Add(items.Shader("COSW"), GLRenderableItem.CreateVector4Color4(items, PrimitiveType.Lines, lines, GLShapeObjectFactory.CreateLines(new Vector3(-100, -0, -100), new Vector3(100, -0, -100), new Vector3(0, 0, 10), 21), new Color4[] { Color.Red, Color.Red, Color.DarkRed, Color.DarkRed })); } if (true) { GLRenderState lines = GLRenderState.Lines(1); rObjects.Add(items.Shader("COSW"), GLRenderableItem.CreateVector4Color4(items, PrimitiveType.Lines, lines, GLShapeObjectFactory.CreateLines(new Vector3(-100, 10, -100), new Vector3(-100, 10, 100), new Vector3(10, 0, 0), 21), new Color4[] { Color.Yellow, Color.Orange, Color.Yellow, Color.Orange }) ); rObjects.Add(items.Shader("COSW"), GLRenderableItem.CreateVector4Color4(items, PrimitiveType.Lines, lines, GLShapeObjectFactory.CreateLines(new Vector3(-100, 10, -100), new Vector3(100, 10, -100), new Vector3(0, 0, 10), 21), new Color4[] { Color.Yellow, Color.Orange, Color.Yellow, Color.Orange }) ); } #endregion #region Coloured cubes if (true) { GLRenderState rc = GLRenderState.Tri(); rc.CullFace = false; var cube1pos = GLCubeObjectFactory.CreateSolidCubeFromTriangles(5f, new Vector3(10, 2.5f, 10)); var cube1dtr = new GLRenderDataTranslationRotation(new Vector3(0, 0, 0)); // these are on positive Z and x rObjects.Add(items.Shader("COSOT"), "scopen", GLRenderableItem.CreateVector4Color4(items, PrimitiveType.Triangles, rc, cube1pos, new Color4[] { Color4.Green, Color4.Green, Color4.Blue, Color4.Blue, Color4.Cyan, Color4.Cyan }, cube1dtr )); var cube2pos = GLCubeObjectFactory.CreateSolidCubeFromTriangles(5f, new Vector3(10, 2.5f, 50)); rObjects.Add(items.Shader("COSOT"), "scopen1", GLRenderableItem.CreateVector4Color4(items, PrimitiveType.Triangles, rc, cube2pos, new Color4[] { Color4.Green, Color4.Green, Color4.Blue, Color4.Blue, Color4.Cyan, Color4.Cyan }, cube1dtr )); // this one above cube2 for use in testing ortho mode var cube3pos = GLCubeObjectFactory.CreateSolidCubeFromTriangles(5f, new Vector3(10, 10.25f, 50)); rObjects.Add(items.Shader("COSOT"), "scopen2", GLRenderableItem.CreateVector4Color4(items, PrimitiveType.Triangles, rc, cube3pos, new Color4[] { Color4.Yellow }, cube1dtr )); // negative z and x rObjects.Add(items.Shader("COSOT"), "scopen3", GLRenderableItem.CreateVector4Color4(items, PrimitiveType.Triangles, rc, GLCubeObjectFactory.CreateSolidCubeFromTriangles(5f), new Color4[] { Color4.Red, Color4.Red, Color4.Red, Color4.Red, Color4.Red, Color4.Red }, new GLRenderDataTranslationRotation(new Vector3(-10, -2.5f, -10)) )); rObjects.Add(items.Shader("COSOT"), "scopen4", GLRenderableItem.CreateVector4Color4(items, PrimitiveType.Triangles, rc, GLCubeObjectFactory.CreateSolidCubeFromTriangles(5f), new Color4[] { Color4.Red, Color4.Red, Color4.Red, Color4.Red, Color4.Red, Color4.Red }, new GLRenderDataTranslationRotation(new Vector3(-10, -2.5f, -20)) )); } #endregion #region textures if (true) { // texture facing upwards, culled if viewer below it GLRenderState rq = GLRenderState.Quads(); rObjects.Add(items.Shader("TEXOT"), GLRenderableItem.CreateVector4Vector2(items, PrimitiveType.Quads, rq, GLShapeObjectFactory.CreateQuad(5.0f, 5.0f, new Vector3(-0f.Radians(), 0, 0), ccw: gl3dcontroller.MatrixCalc.ModelAxisPositiveZAwayFromViewer), GLShapeObjectFactory.TexQuadCW, new GLRenderDataTranslationRotationTexture(items.Tex("dotted2"), new Vector3(0, 0, 0)) )); } #endregion #region Matrix Calc Uniform items.Add(new GLMatrixCalcUniformBlock(), "MCUB"); // def binding of 0 #endregion }
} // /// <summary> Constructor. Matrix determines if using matrix or vector4 for position. Blendimages gives the number of images to blend, 0 for not </summary> public GLMultipleTexturedBlended(bool matrix, int blendimages) { CompileLink(vertex: matrix?vertmat: vertpos, frag: frag, geo: geo); BlendImages = blendimages; CommonTransform = new GLRenderDataTranslationRotation(); }