006
29.09.2006, 16:20 Uhr
elturco
|
Hallo nochmal zusammen,
ich sollte die Frage mal ein wenig anders stellen. Ich bin nicht so sehr vertraut mit C++. Es geht hierbei im "Interplotion" im Bereich Computer Animation, die Aufgabe besteht darin, dass ich eine "Animation" bekomme, wo z.B. ein Männeken am laufen ist und während die Animation läuft soll ich eine andere Animation hochladen, mit einem anderen Verhalten z.B. er geht diesmal rückwärts. Das Ziel ist es die übergänge der beiden Animationen so "geschmeidig" wie möglich zu machen, d.h. zu Interpolieren.
Ich versuche gerade dem Button "Interpolate" mitzuteilen, dass er eine Funktion aufrufen soll. Das sieht folgerdermaßen aus.
Der Konstruktor
C++: |
Interpolator::Interpolator(Motion* pSampledMotion, char* pOffsetFileName) { //Set default interpolation type m_InterpTypeToUse = LINEAR;
//set default angle representation to use for interpolation m_AngleRepresToUse = EULER;
//Set motion to be interpolated m_pSampledMotion = pSampledMotion;
//Set ErrorType to NO_ERROR m_ErrorType = NO_ERROR_SET;
//Init m_pTimeDistArray array m_pTimeDistArray = NULL; ReadOffsetFile(pOffsetFileName); }
|
die Funktion ich aufrufen möchte: zuerst die erste und danach die zweite
C++: |
void Interpolator::ReadOffsetFile(char* pOffsetFileName) { //open the file FILE* pInFile = fopen(pOffsetFileName, "r"); if (pInFile == NULL) { m_ErrorType = BAD_OFFSET_FILE; return; }
//Allocate memory for m_pTimeDistArray m_pTimeDistArray = new int [m_pSampledMotion->m_NumFrames];
int frameNum, frameNumPrev = 0; //read the file for (int i = 0; i < m_pSampledMotion->m_NumFrames; i++) { //read next line if (fscanf(pInFile, "%d", &frameNum) == -1) { m_ErrorType = BAD_OFFSET_FILE; return; }
//Compute offset and store into array //offset = number of frames skipped between frame i and i-1 m_pTimeDistArray[i] = frameNum - frameNumPrev - 1; frameNumPrev = frameNum;
} }
//Create interpolated motion void Interpolator::Interpolate(Motion*& pInterpMotion) { //Do nothing if error is set if (m_ErrorType != NO_ERROR_SET) { pInterpMotion = NULL; return; }
//Compute number of frames int the new (interpolated) motion int nNumFrames = 0; //Count all skipped frames for (int i = 0; i < m_pSampledMotion->m_NumFrames; i++) nNumFrames += m_pTimeDistArray[i]; //Add number of frames on the sampled file nNumFrames += m_pSampledMotion->m_NumFrames;
//Allocate new motion - initially set to default motion pInterpMotion = new Motion(nNumFrames);
//Perform the interpolation if (m_InterpTypeToUse == LINEAR && m_AngleRepresToUse == EULER) LinearInterpEulerAngles(pInterpMotion); else { //For now only linear interpolation of euler angles is supported m_ErrorType = NOT_SUPPORTED_INTERP_TYPE; delete pInterpMotion; pInterpMotion = NULL; return; } }
|
Jetzt meine Frage ich mein die Frage ist wohl für den einen oder anderen ziemlich einfach, aber ich kenne mich halt nicht so sehr damit aus: Ich möchte meinem Button" Interpolate sagen" dass er eines Funktionen aufrufen soll, aber beim erzeugen des Objektes habe ich meine Probleme
C++: |
static Motion *pSampledMotion = NULL; // Motion information as read from AMC file
//Interpolate loaded motion using linear interpolation void interpolate_callback(Fl_Button *button, void *) { interpolate_button->value(); ?? Interpolator neu = new Interpolator(pSampledMotion,????????);
}
|
Ich mein mein Konstruktor hat 2 Parameter, ich weiss hier nicht wie ich diesen 2 Parameter bestimmen kann. Ich kann sagen ok, fopen usw. aber in der Funktion ReadOffsetFile wird ja so ein File geöffnet ?
Habt Ihr meine Frage verstanden ???
Würd mich freuen wenn ihr mir helfen könntet...
Grüße
Bearbeitung von Uwe: |
Bitte cpp - Tag verwenden.
|
Dieser Post wurde am 29.09.2006 um 16:33 Uhr von Uwe editiert. |