Кто знает, эффективно выводить текст в SimpleOpenGLControl средсвами Tao?

В моей проге, которую я пишу с помощью Tao, нужно рисовать 2D текст. Насколько я понял задача эта вовсе не тривиальная.

Необходимо чтобы я мог задавать шрифт, размер, цвет и язык вывода (мне нужна кириллица). То есть библиотека freeGlut здесь не подойдет (на сколько я понял из урока 5.4 там очень ограниченный набор шрифтов и невозможность использовать кириллицу). Вот тут и начались мои google мытарства. В итоге после многих часов поиска я не обнаружил ни одного внятного способа вывода текста в SimpleOpenGLControl.

Думаю каждому из нас это может понадобиться, поэтому надо основательно разобраться. Вот, например, в Tao есть FreeType. Но, как ей пользоваться? Ни толкового примера найдено не было...

Буду премного благодарен за разъяснение этого вопроса...
0       2020        23.03.2011        21

0  
23.03.2011 00:00:00
Есть очень костыльный способ без Tao, тебе врятли подойдет: у меня в проекте я использую тултипы, появляющиеся при наведении на объект сцены.
0  
23.03.2011 00:00:00
garnett91 — cпасибо. Люди, прощу Вас, отзовитесь! Я работаю на оборонку и мне необходимо в проге которую я делаю отображать формуляр цели, обязательно на русском. До этого я худо — бедно со всеми заморочками справлялся, в том числе и благодаря этим урокам, за что огромное спасибо, но со шрифтами оказался полный ступор… Уверен что качественный и надежный способ выводить текст в SimpleOpenGLControl нам всем может пригодиться.
0  
24.03.2011 00:00:00
Можешь попробовать наложить простой label поверх simpleOpenGlControl, но я так понял, те нужен текст именно в внутри simpleOpenGlControl в 3D, ща вышлю ссылку с примером.
0  
25.03.2011 00:00:00
можно и мне ссылку?
0  
25.03.2011 00:00:00
, поклацаете next, там еще всякие примеры.
А label сверху наложить, просто перетянуть с toolbox-а и поместить сверху SimpleOpenglContol-a, а в коде управлять цветом, видимостью, положением и т. д.
0  
25.03.2011 00:00:00
Жаль, что русский не поддерживает.
0  
25.03.2011 00:00:00
В суперкниге по OpenGl на стр. 658 описывается функция wglUseFontBitmaps, которая, видимо, прекрасно справляется с выводом системных шрифтов.

Первым аргументом она принимает hDC — контекст устройства. Может кто знает, как определить какой hDC у simpleOpenGlControl? Возможно тогда проблема решится…
0  
25.03.2011 00:00:00
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 Tao.Platform.Windows;
namespace WindowsFormsApplication3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
simpleOpenGlControl1.InitializeContexts();
}

private void simpleOpenGlControl1_Load(object sender, EventArgs e)
{
IntPtr hdc1 = Wgl.wglGetCurrentContext();//первый способ
//MessageBox.Show(hdc1.ToString());
}

private void simpleOpenGlControl1_Paint(object sender, PaintEventArgs e)
{
IntPtr hdc1 = Wgl.wglGetCurrentContext();//первый способ
IntPtr hdc2 = e.Graphics.GetHdc();//второй
//label1.Text = hdc1.ToString();
//label1.Text += " " + hdc2.ToString();
}
}
}

попробуй, я не проверял. Какой-то, по идеи должен работать.
0  
25.03.2011 00:00:00
первый кстати из Tao.Platform.Windows; он вроде должен работать
0  
25.03.2011 00:00:00
они возвращают разные значения
0  
25.03.2011 00:00:00
вместо второго можно использовать вот это Wgl.wglGetCurrentDC();// из Tao.Platform.Windows;
0  
25.03.2011 00:00:00
Да, спасибо. Вот вот ссылка на тот способ вывода шрифтов о котором я говорил:



+ суперкнига стр.658 там нечто аналогичное. Хотел сходу проверить, но возникла проблема создания

HFONT hFont;
LOGFONT logfont;

Думаю чуть позже разберусь и напишу о результатах.
0  
25.03.2011 00:00:00
попробуй вот это
System.Drawing.Font g = new Font(FontFamily.GenericSansSerif, 14.0);
Object log;
g.ToLogFont(log);
про
0  
25.03.2011 00:00:00
0  
26.03.2011 00:00:00
лучший вариант конечно, писать с++, так как все это больше рассчитано на него. Можно конечно как то freetype(для шрифтов входит в Tao) повозиться и сделать класс отображение текста собственными силами.
На с++ есть пару библиотек для этого, чтоб самому не писать, вот пример:
0  
27.03.2011 00:00:00
я же отвечал что label сделай
0  
27.03.2011 00:00:00
это ты к чему?! ты все прочитал!?
0  
27.03.2011 00:00:00
блин я просто не в тот пост написал))
0  
27.03.2011 00:00:00

вот сюда случайно
0  
28.03.2011 00:00:00
Всем привет! Значит, нужно создать экземпляр структуры LOGFONT (не путать с LogFont — разные вещи, уже проверил...), а затем вызвать функцию CreateFontIndirect когда определим поля структуры.

Как я понял из разных источников, это все берется из gdi32.dll, как, например, в этом случае:


Все бы ничего, только как правильно осуществить DllImport пока не понятно. В примере это место пропущено. Через ссылки gdi32.dll добавляться не хочет. Может кто чего знает по этому поводу?
0  
28.03.2011 00:00:00
Вот пример:
[DllImport("user32.dll", EntryPoint = "LoadCursorFromFileW", CharSet = CharSet.Unicode)]
public static extern IntPtr LoadCursorFromFile(String str);
есть не плохая утилитка, для удобного импорта.
^