it is the first chunk in the bsp data held in each SOBJ chunk, for each def point there are a number of normals (used for each point in every polygon this defpoint is used in)
here is an example of some code that I used to load the defpoints
void OBJ2::parse_defpoint(int offset){
//CString debug_string;
int oldoffset = offset;
offset += 8;
//MessageBox(NULL, "into defpoint", "!", MB_OK);
	int OFFSET;
	render_data.normcount = &bsp_data[oldoffset + 20];
//MessageBox(NULL, "past normcount", "!", MB_OK);
	parseI(render_data.n_defpoints, bsp_data, offset);
	parseI(render_data.n_norms, bsp_data, offset);
	parseI(OFFSET, bsp_data, offset);
/*	for(int i = 0; idebug_string.Format("point %d has %d norms",i, (int)normcount[i]);
MessageBox(NULL, debug_string, "!", MB_OK);
	}
*/
	offset = oldoffset +OFFSET;
	render_data.defpoint = new vector[render_data.n_defpoints];
	render_data.normal = new vector[render_data.n_norms];
//debug_string.Format("about to enter the defpoint/normal parseing thingy, with %d points",render_data.n_defpoints);
//MessageBox(NULL, debug_string, "!", MB_OK);
int k = 0;
	for(int i = 0; i		memcpy(&render_data.defpoint[i].x, &bsp_data[offset], sizeof(float));
		memcpy(&render_data.defpoint[i].y, &bsp_data[offset += sizeof(float)], sizeof(float));
		memcpy(&render_data.defpoint[i].z, &bsp_data[offset += sizeof(float)], sizeof(float));
		offset += sizeof(float);
//		parseV(render_data.defpoint, bsp_data, off_set);
//		offset += sizeof(vector)*normcount[i];
//debug_string.Format("iteration %d, defpoint x %0.2f y %0.2f z %0.2f",i, render_data.defpoint[i].x, render_data.defpoint[i].y, render_data.defpoint[i].z);
//MessageBox(NULL, debug_string, "!", MB_OK);
		for(int z = 0; z			memcpy(&render_data.normal[k].x, &bsp_data[offset], sizeof(float));
			memcpy(&render_data.normal[k].y, &bsp_data[offset += sizeof(float)], sizeof(float));
			memcpy(&render_data.normal[k++].z, &bsp_data[offset += sizeof(float)], sizeof(float));
			offset += sizeof(float);
//			parseV(render_data.normal[i][k], bsp_data, off_set);
//debug_string.Format("normal %d, x %0.2f y %0.2f z %0.2f",k ,render_data.normal[(i*render_data.normcount[i])+k].x ,render_data.normal[(i*render_data.normcount[i])+k].y ,render_data.normal[(i*render_data.normcount[i])+k].z);
//MessageBox(NULL, debug_string, "!", MB_OK);
		}
	}
//debug_string.Format("defpoints, n_defpoints %d, n_norms %d,\n first defpoint x %0.2f y %0.2f z %0.2f\nlast x %0.2f y %0.2f z %0.2f", render_data.n_defpoints, render_data.n_norms, render_data.defpoint[0].x, render_data.defpoint[0].y, render_data.defpoint[0].z, render_data.defpoint[render_data.n_defpoints-1].x, render_data.defpoint[render_data.n_defpoints-1].y, render_data.defpoint[render_data.n_defpoints-1].z);
//MessageBox(NULL, debug_string, "!", MB_OK);
}