danisxp's picture

unable to display the text (label) in terhmernom Graph 3D

unable to display the text (label) in terhmernom Graph 3D.

I painfully whole 2 months I could not get that kind of function to display text (or tags) defined in terms of coordinates (X, Y, Z).

Help me!

For example, the code of the program:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using OpenTK;
using OpenTK.Graphics.OpenGL;

namespace WindowsFormsApplication16
{
public partial class Form1 : Form
{
int chartWidth;
int chartHeight;

float AngleX = 45;
float AngleY = 0;
float AngleZ = 45;

const float AngleDl = 5;

float Масштаб = 1;

public Form1()
{
InitializeComponent();

chartWidth = glChart.Width;
chartHeight = glChart.Height;
}

private void BuildFonts()
{
}

private void glChart_Paint(object sender, PaintEventArgs e)
{
GL.ClearColor(0.5f, 0.5f, 0.75f, 1.0f); // цвет фона
// очистка буферов цвета и глубины
GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

// поворот изображения
GL.LoadIdentity();
GL.Rotate(AngleX, 1.0, 0.0, 0.0);
GL.Rotate(AngleY, 0.0, 1.0, 0.0);
GL.Rotate(AngleZ, 0.0, 0.0, 1.0);

// увеличение или уменьшение изображения
GL.Scale(Масштаб, Масштаб, Масштаб);
//GL.Translate(0, 0, 0);

// формирование осей координат
GL.Begin(BeginMode.Lines);
GL.Color3(1f, 0f, 0f); GL.Vertex3(-10, 0, 0); GL.Vertex3(10, 0, 0);
GL.Color3(0f, 1f, 0f); GL.Vertex3(0, -10, 0); GL.Vertex3(0, 10, 0);
GL.Color3(0f, 0f, 1f); GL.Vertex3(0, 0, -10); GL.Vertex3(0, 0, 10);
GL.End();
// видовые преобразования
GL.Rotate(45, 0, 0, 1);
GL.Translate(5, 0, 0);
// формирования квадрата
GL.Color3(0f, 0f, 1f); // цвет фона
GL.Rect(-1f, -1f, 1f, 1f);

// формирование метки X - не удалось отобразить метку????
char[] str = { 'X' };
GL.RasterPos3(10, 0, 0);
GL.CallLists(1, ListNameType.UnsignedByte, str);

// завершение формирования изображения
GL.Flush();
GL.Finish();

glChart.SwapBuffers();
}

private void glChart_Resize(object sender, EventArgs e)
{
GL.Viewport(0, 0, glChart.Width, glChart.Height);
GL.MatrixMode(MatrixMode.Projection);
GL.LoadIdentity();
GL.Ortho(-10, 10, -10, 10, -10, 10);
GL.MatrixMode(MatrixMode.Modelview);
glChart.Invalidate();
}

private void glChart_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Insert:
AngleX += AngleDl;
break;
case Keys.Delete:
AngleX -= AngleDl;
break;
case Keys.Home:
AngleY += AngleDl;
break;
case Keys.End:
AngleY -= AngleDl;
break;
case Keys.Prior:
AngleZ += AngleDl;
break;
case Keys.Next:
AngleZ -= AngleDl;
break;
case Keys.Add:
Масштаб += 0.01f;
break;
case Keys.Subtract:
Масштаб -= 0.01f;
break;
}
glChart.Invalidate();
}
}
}