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

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

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

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

Буду премного благодарен за разъяснение этого вопроса...
0      1986        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);
есть не плохая утилитка, для удобного импорта.
^
Регистрация
Регистрируясь, вы принимаете правила сайта. Если вы не получили код подтв. регистрации - не забудьте проверить папку спам.
Логин*
Email*
Пароль*
Подтверждение пароля*
 
Логин*
Код*
 
×
Восстановление пароля
Пожалуйста, заполните поля, после чего вы получите код подтверждения на ваш Email. Если код не пришел в течении нескольких минут - проверьте папку спам.
Логин

или Email
Логин*
Код подтверждения*
Новый пароль*
Подтверждение пароля*
×
Авторизация
  • Используйте вашу учетную запись на Facebook.com для входа на сайт.
  • Используйте вашу учетную запись VKontakte для входа на сайт.
  • Используйте вашу учетную запись Google для входа на сайт.
Авторизуйтесь с помощью соц. сети или с помощью аккаунта на сайте:
×