У меня есть набор значений X, Y, Z на регулярной разнесенной сетке, из которой мне нужно создать цветной контурный график с использованием C ++.Я уже несколько дней гуглю на это, и, похоже, все согласны с тем, что этого можно достичь, используя 1D текстурную карту в openGL.Однако я не нашел ни одного примера того, как на самом деле это сделать, и я никуда не денусь, просто читая документацию openGL.Моя путаница сводится к одному основному вопросу:
Мои данные не содержат значения X, Y для каждого пикселя - это равномерно распределенная сетка с данными каждые 4 единицы по осям X и Y, с положительным целым числомЗначение Z.
Например: (0, 0, 1), (4, 0, 1), (8, 0, 2), (0, 4, 2), (0, 8, 4), (4, 4, 3) и т. Д.
Поскольку контуры будут основаны на значении Z, и между точками данных будут промежутки, как применение одномерной текстуры обеспечивает контурную обработку этих данных (то есть как применение 1D текстуры интерполирует между точками сетки?)
Наиболее близким примером, который я нашел, является онлайн-версия Redbook (http://fly.cc.fer.hr/~unreal/theredbook/chapter09.html) в примере с чайником).но я предполагаю, что в модели чайника есть данные для каждого пикселя, и поэтому не требуется интерполяция между точками данных.
Если кто-то может пролить свет на мой вопрос или, что еще лучше, указать конкретный пример работы с 1Dкарта текстуры таким образом, я буду вечно благодарен, так как я сжег 2 дняв этом проекте с небольшим, чтобы показать это.
РЕДАКТИРОВАТЬ:
Я использую следующий код, и хотя он отображает точки в правильном месте, нет интерполяции или контуровпроисходит - точки просто отображаются как, ну, точки.
//Create a 1D image - for this example it's just a red line
int stripeImageWidth = 32;
GLubyte stripeImage[3*stripeImageWidth];
for (int j = 0; j < stripeImageWidth; j++) {
stripeImage[3*j] = j < 2 ? 0 : 255;
stripeImage[3*j+1] = 255;
stripeImage[3*j+2] = 255;
}
glDisable(GL_TEXTURE_2D);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexImage1D(GL_TEXTURE_1D, 0, 3, stripeImageWidth, 0, GL_RGB, GL_UNSIGNED_BYTE, stripeImage);
glTexParameterf(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameterf(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glTexGeni( GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR );
float s[4] = { 0,1,0,0 };
glTexGenfv( GL_S, GL_OBJECT_PLANE, s );
glEnable( GL_TEXTURE_GEN_S );
glEnable( GL_TEXTURE_1D );
glBegin(GL_POINTS);
//_coords contains X,Y,Z data - Z is the value that I'm trying to contour
for (int x = 0; x < _coords.size(); ++x)
{
glTexCoord1f(static_cast<ValueCoord*>(_coords[x])->GetValue());
glVertex3f(_coords[x]->GetX(), _coords[x]->GetY(), zIndex);
}
glEnd();