mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 14:18:24 +02:00
Merge branch 'master' of github.com:/worklist/hifi into 19170B
This commit is contained in:
commit
8c4c51a2e9
7 changed files with 70 additions and 31 deletions
|
@ -231,19 +231,19 @@ int audioCallback (const void *inputBuffer,
|
||||||
if (ringBuffer->getEndOfLastWrite() != NULL) {
|
if (ringBuffer->getEndOfLastWrite() != NULL) {
|
||||||
|
|
||||||
if (!ringBuffer->isStarted() && ringBuffer->diffLastWriteNextOutput() < PACKET_LENGTH_SAMPLES + JITTER_BUFFER_SAMPLES) {
|
if (!ringBuffer->isStarted() && ringBuffer->diffLastWriteNextOutput() < PACKET_LENGTH_SAMPLES + JITTER_BUFFER_SAMPLES) {
|
||||||
printf("Held back, buffer has %d of %d samples required.\n", ringBuffer->diffLastWriteNextOutput(), PACKET_LENGTH_SAMPLES + JITTER_BUFFER_SAMPLES);
|
//printf("Held back, buffer has %d of %d samples required.\n", ringBuffer->diffLastWriteNextOutput(), PACKET_LENGTH_SAMPLES + JITTER_BUFFER_SAMPLES);
|
||||||
} else if (ringBuffer->diffLastWriteNextOutput() < PACKET_LENGTH_SAMPLES) {
|
} else if (ringBuffer->diffLastWriteNextOutput() < PACKET_LENGTH_SAMPLES) {
|
||||||
ringBuffer->setStarted(false);
|
ringBuffer->setStarted(false);
|
||||||
|
|
||||||
starve_counter++;
|
starve_counter++;
|
||||||
packetsReceivedThisPlayback = 0;
|
packetsReceivedThisPlayback = 0;
|
||||||
|
|
||||||
printf("Starved #%d\n", starve_counter);
|
//printf("Starved #%d\n", starve_counter);
|
||||||
data->wasStarved = 10; // Frames to render the indication that the system was starved.
|
data->wasStarved = 10; // Frames to render the indication that the system was starved.
|
||||||
} else {
|
} else {
|
||||||
if (!ringBuffer->isStarted()) {
|
if (!ringBuffer->isStarted()) {
|
||||||
ringBuffer->setStarted(true);
|
ringBuffer->setStarted(true);
|
||||||
printf("starting playback %3.1f msecs delayed, \n", (usecTimestampNow() - usecTimestamp(&firstPlaybackTimer))/1000.0);
|
printf("starting playback %3.1f msecs delayed \n", (usecTimestampNow() - usecTimestamp(&firstPlaybackTimer))/1000.0);
|
||||||
} else {
|
} else {
|
||||||
//printf("pushing buffer\n");
|
//printf("pushing buffer\n");
|
||||||
}
|
}
|
||||||
|
@ -396,7 +396,7 @@ void *receiveAudioViaUDP(void *args) {
|
||||||
if (totalPacketsReceived > 3) stdev.addValue(tDiff);
|
if (totalPacketsReceived > 3) stdev.addValue(tDiff);
|
||||||
if (stdev.getSamples() > 500) {
|
if (stdev.getSamples() > 500) {
|
||||||
sharedAudioData->measuredJitter = stdev.getStDev();
|
sharedAudioData->measuredJitter = stdev.getStDev();
|
||||||
printf("Avg: %4.2f, Stdev: %4.2f\n", stdev.getAverage(), sharedAudioData->measuredJitter);
|
//printf("Avg: %4.2f, Stdev: %4.2f\n", stdev.getAverage(), sharedAudioData->measuredJitter);
|
||||||
stdev.reset();
|
stdev.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -404,7 +404,7 @@ void *receiveAudioViaUDP(void *args) {
|
||||||
|
|
||||||
|
|
||||||
if (!ringBuffer->isStarted()) {
|
if (!ringBuffer->isStarted()) {
|
||||||
printf("Audio packet %d received at %6.0f\n", ++packetsReceivedThisPlayback, usecTimestampNow()/1000);
|
packetsReceivedThisPlayback++;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//printf("Audio packet received at %6.0f\n", usecTimestampNow()/1000);
|
//printf("Audio packet received at %6.0f\n", usecTimestampNow()/1000);
|
||||||
|
|
|
@ -550,6 +550,8 @@ void Head::renderHead( int faceToFace, int isMine )
|
||||||
|
|
||||||
// Always render own hand, but don't render head unless showing face2face
|
// Always render own hand, but don't render head unless showing face2face
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glEnable(GL_RESCALE_NORMAL);
|
||||||
|
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
|
|
||||||
//glScalef(scale, scale, scale);
|
//glScalef(scale, scale, scale);
|
||||||
|
@ -580,17 +582,14 @@ void Head::renderHead( int faceToFace, int isMine )
|
||||||
glRotatef(Roll, 0, 0, 1);
|
glRotatef(Roll, 0, 0, 1);
|
||||||
|
|
||||||
// Overall scale of head
|
// Overall scale of head
|
||||||
if (faceToFace) glScalef(1.5, 2.0, 2.0);
|
if (faceToFace) glScalef(2.0, 2.0, 2.0);
|
||||||
else glScalef(0.75, 1.0, 1.0);
|
else glScalef(0.75, 1.0, 1.0);
|
||||||
|
|
||||||
glColor3fv(skinColor);
|
glColor3fv(skinColor);
|
||||||
|
|
||||||
|
|
||||||
// Head
|
// Head
|
||||||
glutSolidSphere(1, 30, 30);
|
glutSolidSphere(1, 30, 30);
|
||||||
|
|
||||||
//std::cout << distanceToCamera << "\n";
|
|
||||||
|
|
||||||
// Ears
|
// Ears
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef(1.0, 0, 0);
|
glTranslatef(1.0, 0, 0);
|
||||||
|
@ -962,13 +961,13 @@ void Head::updateHandMovement()
|
||||||
// adjust right hand and elbow according to hand offset
|
// adjust right hand and elbow according to hand offset
|
||||||
//----------------------------------------------------------------
|
//----------------------------------------------------------------
|
||||||
avatar.bone[ AVATAR_BONE_RIGHT_HAND ].worldPosition += handOffset;
|
avatar.bone[ AVATAR_BONE_RIGHT_HAND ].worldPosition += handOffset;
|
||||||
glm::dvec3 armVector = avatar.bone[ AVATAR_BONE_RIGHT_HAND ].worldPosition;
|
glm::vec3 armVector = avatar.bone[ AVATAR_BONE_RIGHT_HAND ].worldPosition;
|
||||||
armVector -= avatar.bone[ AVATAR_BONE_RIGHT_SHOULDER ].worldPosition;
|
armVector -= avatar.bone[ AVATAR_BONE_RIGHT_SHOULDER ].worldPosition;
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------
|
||||||
// test to see if right hand is being dragged beyond maximum arm length
|
// test to see if right hand is being dragged beyond maximum arm length
|
||||||
//-------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------
|
||||||
double distance = glm::length( armVector );
|
float distance = glm::length( armVector );
|
||||||
|
|
||||||
|
|
||||||
//-------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------
|
||||||
|
@ -980,10 +979,10 @@ void Head::updateHandMovement()
|
||||||
// reset right hand to be constrained to maximum arm length
|
// reset right hand to be constrained to maximum arm length
|
||||||
//-------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------
|
||||||
avatar.bone[ AVATAR_BONE_RIGHT_HAND ].worldPosition = avatar.bone[ AVATAR_BONE_RIGHT_SHOULDER ].worldPosition;
|
avatar.bone[ AVATAR_BONE_RIGHT_HAND ].worldPosition = avatar.bone[ AVATAR_BONE_RIGHT_SHOULDER ].worldPosition;
|
||||||
glm::dvec3 armNormal = armVector / distance;
|
glm::vec3 armNormal = armVector / distance;
|
||||||
armVector = armNormal * avatar.maxArmLength;
|
armVector = armNormal * (float)avatar.maxArmLength;
|
||||||
distance = avatar.maxArmLength;
|
distance = avatar.maxArmLength;
|
||||||
glm::dvec3 constrainedPosition = avatar.bone[ AVATAR_BONE_RIGHT_SHOULDER ].worldPosition;
|
glm::vec3 constrainedPosition = avatar.bone[ AVATAR_BONE_RIGHT_SHOULDER ].worldPosition;
|
||||||
constrainedPosition += armVector;
|
constrainedPosition += armVector;
|
||||||
avatar.bone[ AVATAR_BONE_RIGHT_HAND ].worldPosition = constrainedPosition;
|
avatar.bone[ AVATAR_BONE_RIGHT_HAND ].worldPosition = constrainedPosition;
|
||||||
}
|
}
|
||||||
|
@ -991,8 +990,8 @@ void Head::updateHandMovement()
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// set elbow position
|
// set elbow position
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
glm::dvec3 newElbowPosition = avatar.bone[ AVATAR_BONE_RIGHT_SHOULDER ].worldPosition;
|
glm::vec3 newElbowPosition = avatar.bone[ AVATAR_BONE_RIGHT_SHOULDER ].worldPosition;
|
||||||
newElbowPosition += armVector * ONE_HALF;
|
newElbowPosition += armVector * (float)ONE_HALF;
|
||||||
glm::dvec3 perpendicular = glm::dvec3( -armVector.y, armVector.x, armVector.z );
|
glm::dvec3 perpendicular = glm::dvec3( -armVector.y, armVector.x, armVector.z );
|
||||||
newElbowPosition += perpendicular * ( 1.0 - ( avatar.maxArmLength / distance ) ) * ONE_HALF;
|
newElbowPosition += perpendicular * ( 1.0 - ( avatar.maxArmLength / distance ) ) * ONE_HALF;
|
||||||
avatar.bone[ AVATAR_BONE_RIGHT_FOREARM ].worldPosition = newElbowPosition;
|
avatar.bone[ AVATAR_BONE_RIGHT_FOREARM ].worldPosition = newElbowPosition;
|
||||||
|
@ -1006,21 +1005,57 @@ void Head::renderBody()
|
||||||
{
|
{
|
||||||
glColor3fv(skinColor);
|
glColor3fv(skinColor);
|
||||||
|
|
||||||
|
// Render bones as spheres
|
||||||
for (int b=0; b<NUM_AVATAR_BONES; b++)
|
for (int b=0; b<NUM_AVATAR_BONES; b++)
|
||||||
{
|
{
|
||||||
glPushMatrix();
|
glPushMatrix();
|
||||||
glTranslatef( avatar.bone[b].worldPosition.x, avatar.bone[b].worldPosition.y, avatar.bone[b].worldPosition.z );
|
glTranslatef( avatar.bone[b].worldPosition.x, avatar.bone[b].worldPosition.y, avatar.bone[b].worldPosition.z );
|
||||||
glScalef( 0.02, 0.02, 0.02 );
|
glutSolidSphere( .02, 10, 5 );
|
||||||
glutSolidSphere( 1, 10, 5 );
|
|
||||||
glPopMatrix();
|
glPopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Render lines connecting the bones
|
||||||
|
glColor3f(1,1,1);
|
||||||
|
glLineWidth(3.0);
|
||||||
|
glBegin(GL_LINE_STRIP);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_CHEST_SPINE].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_NECK].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_CHEST_SPINE].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_LEFT_SHOULDER].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_LEFT_UPPER_ARM].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_LEFT_FOREARM].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_LEFT_HAND].worldPosition.x);
|
||||||
|
glEnd();
|
||||||
|
glBegin(GL_LINE_STRIP);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_CHEST_SPINE].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_RIGHT_SHOULDER].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_RIGHT_UPPER_ARM].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_RIGHT_FOREARM].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_RIGHT_HAND].worldPosition.x);
|
||||||
|
glEnd();
|
||||||
|
glBegin(GL_LINE_STRIP);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_CHEST_SPINE].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_MID_SPINE].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_PELVIS_SPINE].worldPosition.x);
|
||||||
|
glEnd();
|
||||||
|
glBegin(GL_LINE_STRIP);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_PELVIS_SPINE].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_LEFT_PELVIS].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_LEFT_THIGH].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_LEFT_SHIN].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_LEFT_FOOT].worldPosition.x);
|
||||||
|
glEnd();
|
||||||
|
glBegin(GL_LINE_STRIP);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_PELVIS_SPINE].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_RIGHT_PELVIS].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_RIGHT_THIGH].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_RIGHT_SHIN].worldPosition.x);
|
||||||
|
glVertex3fv(&avatar.bone[AVATAR_BONE_RIGHT_FOOT].worldPosition.x);
|
||||||
|
glEnd();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Transmit data to agents requesting it
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Transmit data to agents requesting it
|
|
||||||
|
|
||||||
//called on me just prior to sending data to others (continuasly called)
|
//called on me just prior to sending data to others (continuasly called)
|
||||||
|
|
||||||
|
|
|
@ -104,7 +104,7 @@ enum AvatarBones
|
||||||
struct AvatarBone
|
struct AvatarBone
|
||||||
{
|
{
|
||||||
AvatarBones parent;
|
AvatarBones parent;
|
||||||
glm::dvec3 worldPosition;
|
glm::vec3 worldPosition;
|
||||||
glm::dvec3 defaultPosePosition;
|
glm::dvec3 defaultPosePosition;
|
||||||
glm::dvec3 velocity;
|
glm::dvec3 velocity;
|
||||||
double yaw;
|
double yaw;
|
||||||
|
|
|
@ -609,7 +609,7 @@ void display(void)
|
||||||
{
|
{
|
||||||
myCamera.setYaw ( - myHead.getAvatarYaw() );
|
myCamera.setYaw ( - myHead.getAvatarYaw() );
|
||||||
myCamera.setUp ( 0.4 );
|
myCamera.setUp ( 0.4 );
|
||||||
myCamera.setDistance( 0.08 );
|
myCamera.setDistance( 0.08 );
|
||||||
myCamera.update();
|
myCamera.update();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -619,7 +619,7 @@ void display(void)
|
||||||
{
|
{
|
||||||
myCamera.setYaw ( 180.0 - myHead.getAvatarYaw() );
|
myCamera.setYaw ( 180.0 - myHead.getAvatarYaw() );
|
||||||
myCamera.setUp ( 0.15 );
|
myCamera.setUp ( 0.15 );
|
||||||
myCamera.setDistance( 0.08 );
|
myCamera.setDistance( 0.08 );
|
||||||
myCamera.update();
|
myCamera.update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1078,10 +1078,12 @@ void reshape(int width, int height)
|
||||||
WIDTH = width;
|
WIDTH = width;
|
||||||
HEIGHT = height;
|
HEIGHT = height;
|
||||||
|
|
||||||
|
|
||||||
glMatrixMode(GL_PROJECTION); //hello
|
glMatrixMode(GL_PROJECTION); //hello
|
||||||
fov.setResolution(width, height)
|
fov.setResolution(width, height)
|
||||||
.setBounds(glm::vec3(-0.5f,-0.5f,-500.0f), glm::vec3(0.5f, 0.5f, 0.1f) )
|
.setBounds(glm::vec3(-0.5f,-0.5f,-500.0f), glm::vec3(0.5f, 0.5f, 0.1f) )
|
||||||
.setPerspective(0.7854f);
|
.setPerspective(0.7854f);
|
||||||
|
|
||||||
glLoadMatrixf(glm::value_ptr(fov.getViewerScreenXform()));
|
glLoadMatrixf(glm::value_ptr(fov.getViewerScreenXform()));
|
||||||
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
glMatrixMode(GL_MODELVIEW);
|
||||||
|
|
|
@ -287,7 +287,7 @@ int main(int argc, const char * argv[])
|
||||||
stdev.addValue(tDiff);
|
stdev.addValue(tDiff);
|
||||||
|
|
||||||
if (stdev.getSamples() > 500) {
|
if (stdev.getSamples() > 500) {
|
||||||
printf("Avg: %4.2f, Stdev: %4.2f\n", stdev.getAverage(), stdev.getStDev());
|
//printf("Avg: %4.2f, Stdev: %4.2f\n", stdev.getAverage(), stdev.getStDev());
|
||||||
stdev.reset();
|
stdev.reset();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,8 +82,7 @@ void AgentList::processAgentData(sockaddr *senderAddress, void *packetData, size
|
||||||
case PACKET_HEADER_PING: {
|
case PACKET_HEADER_PING: {
|
||||||
// ping from another agent
|
// ping from another agent
|
||||||
//std::cout << "Got ping from " << inet_ntoa(((sockaddr_in *)senderAddress)->sin_addr) << "\n";
|
//std::cout << "Got ping from " << inet_ntoa(((sockaddr_in *)senderAddress)->sin_addr) << "\n";
|
||||||
char reply[] = "R";
|
agentSocket.send(senderAddress, &PACKET_HEADER_PING_REPLY, 1);
|
||||||
agentSocket.send(senderAddress, reply, 1);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PACKET_HEADER_PING_REPLY: {
|
case PACKET_HEADER_PING_REPLY: {
|
||||||
|
@ -325,7 +324,7 @@ void *checkInWithDomainServer(void *args) {
|
||||||
sockaddr_in tempAddress;
|
sockaddr_in tempAddress;
|
||||||
memcpy(&tempAddress.sin_addr, pHostInfo->h_addr_list[0], pHostInfo->h_length);
|
memcpy(&tempAddress.sin_addr, pHostInfo->h_addr_list[0], pHostInfo->h_length);
|
||||||
strcpy(DOMAIN_IP, inet_ntoa(tempAddress.sin_addr));
|
strcpy(DOMAIN_IP, inet_ntoa(tempAddress.sin_addr));
|
||||||
printf("Domain server %s: %s\n", DOMAIN_HOSTNAME, DOMAIN_IP);
|
printf("Domain server %s: \n", DOMAIN_HOSTNAME);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
printf("Failed lookup domainserver\n");
|
printf("Failed lookup domainserver\n");
|
||||||
|
|
|
@ -5,6 +5,9 @@
|
||||||
// Created by Stephen Birarda on 4/8/13.
|
// Created by Stephen Birarda on 4/8/13.
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
// The packet headers below refer to the first byte of a received UDP packet transmitted between
|
||||||
|
// any two Hifi components. For example, a packet whose first byte is 'P' is always a ping packet.
|
||||||
|
//
|
||||||
|
|
||||||
#ifndef hifi_PacketHeaders_h
|
#ifndef hifi_PacketHeaders_h
|
||||||
#define hifi_PacketHeaders_h
|
#define hifi_PacketHeaders_h
|
||||||
|
|
Loading…
Reference in a new issue